文章插图
微服务架构是由很多小而自治的微服务组合而成,每个服务都提供一套独立自洽的业务能力 。从应用的层面,我们首先对业务进行建模,业务域定义的边界也自然而然作为每个微服务的职能边界 。
文章插图
什么是微服务?【微服务架构】微服务的定义比较直白,但只有理解它的设计理念和原则,才能真正用好它 。从单个服务/服务间关系来看,有以下特征:
- 微服务通常很小、提供很少但独立的功能,服务间耦合度很低 。一个很小的研发团队就可以开发和维护一个微服务 。
- 每个服务都是一个单独的代码库,可以由一个很小的研发团队来管理 。
- 服务可以独立部署,而不需要重新构建和部署整个应用 。
- 每个服务负责维护自己的数据和状态,数据所有权归本服务所有,其他服务必须通过该服务访问数据和状态 。
- 服务之间通过定义好的API进行通信,对外隐藏API的内部实现细节 。
- 支持多语言编程,不同服务可以使用独立的技术栈进行开发,自由选择编程语言、框架和库 。
- 服务管理和编排 。该组件负责把服务部署在物理机/虚拟机节点上、做失败检查、在多个节点上负责对服务的多个实例做负载均衡等 。我们通常可以使用现成的开源技术来充当这个组件,比如k8s 。
- API Gateway 。API Gateway给所有Client提供了访问入口 。Client通常不会直接访问提供业务支持的服务,而是调用API Gateway,由Gateway负责把请求转发给后端对应的服务 。
- 解耦Client和服务,我们可以单独对服务进行更新或重构,client端可能不需要更新甚至不需要感知 。
- 服务间通信可以使用更灵活的方式,比如不走HTTP协议,而是走rpc等二进制协议、消息队列等,某些超大数据量的场景甚至会走p2p协议 。
- API Gateway可以承担一些跨业务的职能,比如权限认证、日志、SSL校验、负载均衡等 。
- API Gateway一般会提供一些开箱即用的能力,比如限流、缓存、请求篡改、权限校验等 。
- 支持敏捷迭代 。由于微服务可以独立部署,所以修复bug和上线新特性也更容易 。你可以独立更新特定的服务,而不是重新部署整个应用,如果更新出现问题,也支持快速回滚 。在传统应用中,一旦在应用的某个环节发现问题,整个发布流程都要被阻塞 。新特性也可以等着bug修复后再去测试和发布 。
- 小而专的研发团队 。微服务可以很小,小到一个独立的小团队iu可以构建、测试和阿布 。小团队非常适合推行敏捷迭代流程 。往往大型团队的生产力更弱一些,因为沟通满,管理成本上升,由此也不适合再推行敏捷迭代 。
- 代码库小 。在大型单体应用中,随着时间推移,代码依赖越来越复杂 。增加新特性意味着要改很多地方的代码 。由于不共享代码和数据,微服务架构将依赖最小化,部署新特性也更容易 。
- 可以融合使用多种技术 。团队成员可以选择最适合服务的技术,并在适当的情况下混合使用多个技术栈 。
- 故障隔离 。如果一个特定的微服务挂掉了,只要上游微服务在设计时考虑到容灾处理,通常不会影响整个应用的正常功能 。比如,采用适当的熔断机制,或者服务间通信走异步消息队列 。
- 架构扩展性好 。每个服务都可以单独进行扩容,这样的话,我们就能独立扩容需要更多资源的子系统,而不是整个应用 。使用K8s等对服务进行编排,我们可以把多个服务的实例部署在同一台机器上,以提高资源利用率 。
- 原生支持服务间的数据隔离 。如果要更新数据的schema,只有单个服务受到影响 。在单体应用中,更新schema往往不太容易,因为应用的多个模块都会通过库依赖的形式访问数据,在更新时,很难追踪到所有使用的地方和使用方式,导致schema的迭代有很多未知的风险 。
推荐阅读
- 什么是多运行时架构?
- Qt中实现Http服务接收POST请求
- 微信如何转账给自己 微信如何转账自己银行卡
- 轻微发霉馒头如何去除安全 轻微发霉的馒头蒸蒸可以吃吗
- 微铃怎么设置本地视频 微信视频怎么设置本地铃声
- 微波炉可以放玻璃碗吗 微波炉可以放玻璃碗吗会爆炸吗
- 泡芙可以用微波炉加热吗 泡芙可以用微波炉加热吗多久
- 微波炉铁碗可以加热吗 微波炉不能放五类
- 微信公众号字体怎么改字体样式 微信公众号字体怎么改
- 四个字的微信名字淡雅带春字女 四个字的微信名字淡雅