deployable services.... organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data. - Martin Fowler • Create application out of independently deployable services • Verticals around business capabilities • Decentralized data • Automated deployment • 1 service per process • Lightweight communications between services (typically REST)
of dependencies already at design time • Microservices always must communicate remotely • Proprietary Annotations / API • No flexibility in packaging 1 Microservice = 1 Deployment Unit = 1 Process
MINOR version - added functionality in a backwards-compatible manner • BUGFIX version - backwards-compatible bug fixes Mind the difference between API and SPI.
talk to each other using an OSGi ChatListener interface described in API bundle • IRC connector using camel • Shell integration using gogo • Tinkerforge Display and Motion detector • Optional Remoting using Aries RSA
IRC All in one • 1 Process • 6MB runnable jar • No remote calls inside application • Still modular as bundles only coupled through API and OSGi service
deployment units as needed • Each deployment unit can scale • Runnable jars or docker containers • Cloud native if needed • Aries RSA overhead 300 KB + 800 KB zookeeper lib • Remote calls or local calls as needed • Many options for remotings (tcp, fastbin, SOAP, REST, JMS)
your application using modular bundles • Stay on single process as long as possible • Decide about the packaging and deployment as late as possible • Deploy only as fine granular as needed