单个轻量级服务一般为一个单独微服务,微服务讲究的是
专注某个功能的实现,比如登录系统只专注于用户登录方面功能的实现,讲究的是职责单一,开箱即用,可以独立运行。微服务架构系统是一个分布式的系统,按照业务进行划分服务单元模块,解决单个系统的不足,满足越来越复杂的业务需求。
马丁福勒(Martin Fowler):就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常而言,微服务架构是一种架构模式或者说是架构风格,它提倡将单一应用程序划分成一组小的服务。每个服务运行在其独立的自己的进程中服务之间相互配合、相互协调,为用户提供最终价值。服务之间采用轻量级通信。每个服务都围绕具体业务进行构建,并能够独立部署到生产环境等。另外应尽量避免统一的、集中的服务管理机制。
解耦(Decoupling) - 系统内的服务很大程度上是分离的。因此整个应用可以被轻松构建、修改和扩展
组件化(Componentization) - 微服务被视为可以被轻松替换和升级的独立组件
业务能力(Business
Capabilities) - 微服务非常简单,专注于单一功能
自治(Autonomy) - 开发人员和团队可以相互独立工作,从而提高效率
持续交付(ContinousDelivery) - 允许频繁发版,通过系统自动化完成对软件的创建、测试和审核,
责任(Responsibility) - 微服务不把程序作为项目去关注。相反,他们将程序视为自己负责的产品
分散治理(Decentralized
Governance) - 重点是用正确的工具去做正确的事。这意味着没有任何标准化模式或着技术模式。开发人员可以自由选择最合适的工具来解决自己的问题
敏捷性(Agility) - 微服务支持敏捷开发。任何新功能都可以快速开发并被再次丢弃
优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低。在开发中,不需要了解多有业务,只专注于当前功能,便利集中,功能小而精。
微服务一个功能受损,对其他功能影响并不是太大,可以快速定位问题。微服务只专注于当前业务逻辑代码,不会和
html、css 或其他界面进行混合。 可以灵活搭配技术,独立性比较舒服。
缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大,运维工程师压力增大,人力资源增多,系统依赖增强,数据一致性,性能监控。
独立开发:所有微服务都可以根据各自的功能轻松开发
独立部署:根据他们所提供的服务,可以在任何应用中单独部署
故障隔离:即使应用中的一个服务不起作用,系统仍然继续运行
混合技术栈:可以用不同的语言和技术来构建同一应用程序的不同服务
粒度缩放:各个组件可根据需要进行扩展,无需将所有组件融合到一起
微服务,又名微服务架构,是一种架构风格,它将应用构建为一个小型自治服务的集合,以业务领域为模型。
通俗地说,就像蜜蜂通过对蜡制的等边六角形单元来构建它们的蜂巢。
他们最初从使用各种材料的小单元开始,一点点的搭建出一个大型蜂巢。
这些小单元组成坚固的结构,将蜂窝的特定部分固定在一起。
这里,每个小单元都独立于另一个,但它也与其他小单元相关。
这意味着对一个小单元的损害不会损害其他的单元,因此,蜜蜂可以在不影响完整蜂巢的情况下重建这些单元。
请参考上图。这里,每个六边形都代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术栈构建单独的服务组件。就像在蜂巢中一样,这些服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外敏捷团队可以单独处理每个服务组件的问题,而不会对整个应用程序产生影响或使影响最小。
为每个微服务分开数据存储
将代码保持在类似的成熟度等级上
为每个微服务进行单独的构建
部署到容器中
将服务器视为无状态的
开发较小的微服务听起来很容易,但在开发时会经常遇到一些挑战。
自动化组件:难以自动化,因为有许多较小的组件。对于每个组件,都必须采取构建、发布和监控的步骤。
可感知性:将大量组件维持在一起会带来难以部署、维护、监控和识别的问题。它需要在所有组件周围具有很好的感知能力。
配置管理:有时在各种环境中维护组件的配置会很困难。
调试:很难找到与产生的错误相关的每一项服务。维护一个集中式的日志和控制面板对调试问题至关重要。
幂等性是能够以同样的方式做两次,而最终结果将保持不变,就好像它只做了一次的特性。
用法:在远程服务或数据源中使用幂等性,以便当它多次接收指令时,只处理一次。
服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。