微服务
什么是微服务
又称微服务 架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 。
通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使用各种材料的小部分开始,并继续从中构建一个大型蜂箱。这些细胞形成图案,产生坚固的结构,将蜂窝的特定部分固定在一起。这里,每个细胞独立于另一个细胞,但它也与其他细胞相关。这意味着对一个细胞的损害不会损害其他细胞,因此,蜜蜂可以在不影响完整蜂箱的情况下重建这些细胞。
请参考上图。这里,每个六边形形状代表单独的服务组件。与蜜蜂的工作类似,每个敏捷团队都使用可用的框架和所选的技术堆栈构建单独的服务组件。就像在蜂箱中一样,每个服务组件形成一个强大的微服务架构,以提供更好的可扩展性。此外,敏捷团队可以单独处理每个服务组件的问题,而对整个应用程序没有影响或影响最小。
微服务架构有哪些优势?
- 独立开发 – 所有微服务都可以根据各自的功能轻松开发
- 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们
- 故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行
- 混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务
- 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起
微服务有哪些特点?
- 解耦 – 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展
- 组件化 – 微服务被视为可以轻松更换和升级的独立组件
- 业务能力 – 微服务非常简单,专注于单一功能
- 自治 – 开发人员和团队可以彼此独立工作,从而提高速度
- 持续交付 – 通过软件创建,测试和批准的系统自动化,允许频繁发布软件
- 责任 – 微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品
- 分散治理 – 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题
- 敏捷 – 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃
微服务架构如何运作?
- 客户端 – 来自不同设备的不同用户发送请求。
- 身份提供商 – 验证用户或客户身份并颁发安全令牌。
- API网关 – 处理客户端请求。
- 静态内容 – 容纳系统的所有内容。
- 管理 – 在节点上平衡服务并识别故障。
- 服务发现 – 查找微服务之间通信路径的指南。
- 内容交付网络 – 代理服务器及其数据中心的分布式网络。
- 远程服务 – 启用驻留在IT设备网络上的远程访问信息。
微服务架构的优缺点是什么?
微服务架构的优点
|
微服务架构的缺点
|
自由使用不同的技术
|
增加故障排除挑战
|
每个微服务都侧重于单一功能
|
由于远程呼叫而增加延迟
|
支持单个可部署单元
|
增加了配置和其他操作的工作量
|
允许经常发布软件
|
难以保持交易安全
|
确保每项服务的安全性
|
艰难地跨越各种边界跟踪数据
|
多个服务是并行开发和部署的
|
难以在服务之间进行编码
|
单片,SOA和微服务架构有什么区别?
- 单片架构类似于大容器,其中应用程序的所有软件组件组装在一起并紧密封装。
- 一个面向服务的架构是一种相互通信服务的集合。通信可以涉及简单的数据传递,也可以涉及两个或多个协调某些活动的服务。
- 微服务架构是一种架构风格,它将应用程序构建为以业务域为模型的小型自治服务集合。
在使用微服务架构时,您面临哪些挑战?
- 自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循Build,Deploy和Monitor的各个阶段。
- 易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。它需要在所有组件周围具有很好的感知能力。
- 配置管理:有时在各种环境中维护组件的配置变得困难。
- 调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题至关重要。
SOA和微服务架构之间的主要区别是什么?
SOA
|
微服务
|
遵循“ 尽可能多的共享 ”架构方法
|
遵循“ 尽可能少分享 ”的架构方法
|
重要性在于 业务功能 重用
|
重要性在于“ 有界背景 ” 的概念
|
他们有 共同的 治理 和标准
|
他们专注于 人们的 合作 和其他选择的自由
|
使用 企业服务总线(ESB) 进行通信
|
简单的消息系统
|
它们支持 多种消息协议
|
他们使用 轻量级协议 ,如 HTTP / REST 等。
|
多线程, 有更多的开销来处理I / O.
|
单线程 通常使用Event Loop功能进行非锁定I / O处理
|
最大化应用程序服务可重用性
|
专注于 解耦
|
传统的关系数据库 更常用
|
现代 关系数据库 更常用
|
系统的变化需要修改整体
|
系统的变化是创造一种新的服务
|
DevOps / Continuous Delivery正在变得流行,但还不是主流
|
专注于DevOps /持续交付
|
Web,RESTful API在微服务中的作用是什么?
微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因此,要实现这一点,每个微服务必须具有接口。这使得Web API成为微服务的一个非常重要的推动者。RESTful API基于Web的开放网络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型
功能技术
-
- 服务注册:指定服务器地址,或通过扩展支持其他应用(如 consul - 已支持,redis, zookeeper)
- 服务发现:指定服务器地址,或通过扩展支持其他应用(如 consul - 已支持,redis ,zookeeper)
- 网关:Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Consul集成,并且这些功能都只需要简单的配置即可完成 。
- 服务调用:使用 DotNetty 或 Flurl.Http 实现 RPC 调用
- 服务代理:Microsoft.CodeAnalysis 解析服务接口生成动态代理
- 健康监测:Quartz.Net 定时调度 Socket 任务检查服务器心跳
- 熔断与降级: Polly是一个被.NET基金会认可的弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略,
- 负载均衡:轮询算法(未实现的有: 加权轮询法, 最小连接数法,随机法,加权随机法,源地址哈希法)
- 授权认证:jose-jwt 实现 JWT 授权,identityServer
- 序 列 化:Json.Net
- 系统日志:log4net、NLog
如图所示,这里有四种角色:
- Client:各种客户端, 这是抽象的说法,只要访问了 ApiGateway 都属于客户端(手机、电脑 ,pad, 如果 Service Server1 和 Service Server2 访问了 ApiGateway 也属于客户端)
- ApiGateway: 服务网关,外部要经过它才可访问内部的服务。网关是非常重要的一个角色,他相当于外部和内部服务之间的中介,负责接受和响应外部请求,以及调用内部服务,还有服务治理等功能
- Service Discovery Server:负责保存已注册的服务,相当于服务的花名册, Service Server 注册服务就是向花名册记录自己的名称, ApiGateway 发现服务就是去花名册找有哪些已注册的服务
- Service Server:这就是微服务,所有业务需求都在这里实现