随着领域驱动设计、持续交付、按需虚拟化、基础设施自动化、小型自治团队、大型集群系统这些实践的流行,微服务也应运而生。它不是被发明出来的,而是被总结出来的一种趋势或模式。网络
微服务,就是能够协同工做的微型的服务,这些服务要小,且能够自治。架构
微服务到底多微才算微?有人说,若使用开发时间来计算,一个微服务应该能够在两周内彻底重写。分布式
但这只是个经验法则,具体实施起来仍是要因地制宜。微服务通常来讲足够小便可,不宜太小。换句话说,若是你不以为你的代码库过大,那么它就算足够小了。模块化
使用微服务的好处有不少,并且这些好处遍及于不一样的方面,具体以下:微服务
l 技术异构性:在不一样的服务中,可使用最合适的技术栈去实现功能;测试
l 弹性强:能够很好地处理服务不可用和功能降级;spa
l 扩展性强:使用较小的多个服务,则能够只对须要进行扩展的服务进行扩展;设计
l 简化部署:各个服务独立部署,能够更快地对特定部分进行部署,且更容易回滚;接口
l 便于管理:在小代码库上工做的小团队更加高效;开发
l 可组合性:能够组合使用微服务快速完成一个粗粒度的服务接口;
微服务不是银弹,任何事情都有两面性,在享受微服务带来的便捷之余,也要接收它的不足,具体以下:
l 管理成本高:微服务的相对独立性,会带来大量的服务管理工做;
l 网络问题:一旦使用了微服务,网络就是个问题,不但网络,机器也是如此;
l 分布式失误:相较于传统架构,要作更多的事情保证各个微服务的业务一致性;
随着新功能的增长,代码库会越变越大。时间久了代码库会很是庞大,以致于想要知道该在什么地方作修改都很困难,若在涉及到人员变更,新人接棒后更难维护。
尽管你们都想在本身的系统中作到清晰地模块化,但事实上这些模块,或者说业务之间的界限很难维护。类似的功能随处可见,使得开发或维护变得难上加难。
遇被上述的问题缠绕着,就能够想一想微服务是否能够帮你解决这些事情。
微服务将高内聚、低耦合这个理念应用到独立的服务上,把因相同缘由而变化的东西聚到一块儿,把因不一样缘由而变化的东西分离出来。根据业务的边界来肯定服务的边界
主要总结了什么是微服务,微服务的好处与不足,以及在什么场景使用微服务。
微服务不是银弹,在享受它来带的好处的同时,也要作好准备。主要在服务管理上,须要在部署、测试、监控等方面作更多的工做。
微服务须要根据业务来拆分,业务的边界就是微服务的边界,脱离的业务的微服务很难找到合适的边界,从而使得相互间的依赖变得混乱不堪。