什么是微服务
简单来说,微服务就是一种将一个单一应用程序拆分为一组小型服务的方法,拆分完成后,每一个服务都运行在独立的进程中,服务于服务之间采用轻量级的通信机制来进行沟通(Spring Cloud 中采用基于HTTP 的 RESTful API)。
每一个服务,都是围绕具体的业务进行构建,例如一个电商系统,订单服务、支付服务、物流服务、会员服务等等,这些拆分后的应用都是独立的应用,都可以独立的部署到生产环境中。就是在采用微服务之后,我们的项目不再拘泥于一种语言,可以 Java、Go、Python、PHP 等等,混合使用,这在传统的应用开发中,是无法想象的。而使用了微服务之后,我们可以根据业务上下文来选择合适的语言和构建工具进行构建。
微服务可以理解为是 SOA (面向服务的体系结构) 的一个传承,一个本质的区别是微服务是一个真正分布式、去中心化的,微服务的拆分比 SOA 更加彻底。
微服务的优势
-
复杂度可控
-
独立部署
-
技术选型灵活
-
较好的容错性
-
较强的可扩展性
微服务的设计思想
微服务架构的风格
将应用程序构建为服务套件。除了服务可独立部署和可扩展之外,每个服务还提供了牢固的模块边界,甚至允许使用不同的编程语言编写不同的服务。他们也可以由不同的团队管理。
微服务架构的特征
1、通过服务进行组件化
-
这里组件的定义是:可以独立替换和升级的软件单元。
-
使用服务作为组件(而不是库)的主要原因之一是服务是可独立部署的。
-
将服务用作组件的另一个结果是更明确的组件接口。
2、产品不是项目
微服务的支持者倾向于团队应该在产品的整个生命周期内拥有产品的想法。这样做的一个共同灵感是亚马逊的“构建,运行”概念,其中开发团队对生产中的软件负全部责任。
3、分散数据管理
微服务更喜欢让每个服务管理自己的数据库,或者是同一数据库技术的不同实例,或者是完全不同的数据库系统,一种称为 Polyglot Persistence 的方法。
4、失败设计
-
将服务用作组件的结果是,需要对应用程序进行设计,以便它们可以容忍服务故障。
-
由于服务随时可能发生故障,因此重要的是能够迅速检测到故障,并在可能的情况下自动恢复服务。
-
微服务团队希望看到每项服务的复杂监视和日志记录设置,例如显示上/下状态的仪表板以及各种与业务和业务相关的指标。
5、进化设计
-
组件的关键特性是独立替换和可升级性的概念
-
使用微服务时,您只需要重新部署您修改过的服务即可。这样可以简化并加快发布过程。缺点是您必须担心一项服务的更改会破坏其用户。传统的集成方法是尝试使用版本控制来解决此问题,但是微服务领域的首选是仅使用版本控制作为最后的手段。通过设计服务以尽可能地容忍其供应商的变更,我们可以避免很多版本控制。
参考资源:https://martinfowler.com/articles/microservices.html
每天学习一点点,每天进步一点点。