共计 2249 个字符,预计需要花费 6 分钟才能阅读完成。
本篇文章给大家分享的是有关微服务是什么意思,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
微服务 microservice
微服务是指提供单个业务功能的服务,从技术角度看就是一种小而独立的处理过程,类似流程概念,能够自行单独启动或销毁,拥有自己独立的数据库。
一个复杂软件架构是由很多这样小而独立运行 (有自己的端口) 微服务组成,这些独立处理组件之间通讯是通过与语言无关的 API 进行,简单协议有同步性质的 RMI/RPC 和 RESTful Web Services,异步的消息推送和 Reactive 方式。
这些模块化的方式能够使得公司将项目分解分散到多个开发团队,跨不同业务部门,提供非常充分的灵活性,帮助提高项目的生命周期,加快项目开发完成效率。
每个微服务组件都有自己分配的存储 内存和 CPU 资源,这就使得硬件利用更加易于优化和跟踪,特别是在基于云的 Pass 环境,开发团队可以使用他们喜欢的技术,任何语言都可以,只要确保微服务之间是可交互的,能够组合起后面的应用。
当管理复杂性会因为采取微服务架构而降低,通常更新其中一个微服务组件不会引起连锁反应,因为微服务之间是松耦合的。
目前使用微服务的企业有:Netflix Twitter Amazon Web Services (AWS), Google, eBay 等。
因为有很多应用和服务部署在基于云主机的环境中,微服务架构将会严重依赖容器技术,容器隔离了微服务处理过程,将一个应用切分为一个个小的实例,这些容器中的小实例有自己的端口和虚拟化环境。
广泛使用的容器技术是 Docker, 一种基于 Linux 的开源实现,由很多软件公司支持如 Canonical, Red Hat, 和 Parallels. PaaS 服务支持包括 Google App Engine, Red Hat Open Shift, 和 VMware 的 Cloud Foundry,。
微服务架构不只是传统服务变微变小。微服务两个显著特点是:
鸿蒙官方战略合作共建——HarmonyOS 技术社区
微服务本身是无状态的;
微服务之间很少可变共享。
可以设想一下,如果微服务之间可以共享,那么带来两个问题:微服务团队之间需要合作,因为共享的是一个统一数据库,如果这种共享没有带来沟通成本,没有破坏一个团队就能搞定的宗旨,那么这种共享数据库也是可以考虑,但是这种情况很少,大部分团队因为共享问题破坏了独立性; 再者,微服务如果使用 Docker 分别打包在一个容器中,这些容器可能是跨不同基础设施部署,部署方式很灵活,是一种 cloud native 应用,而共享数据库属于底层基础设施,显然提高了部署难点。
另外,传统服务之间通讯无论是 RPC/RMI 或是 Http/RESTful 都是同步的,而微服务之间通信应该是异步的或 reactive 的,也就是非同步的。根据 FLP 不可能原理,网络默认是不可靠的,RPC 在一旦发生网络堵塞会连环爆炸,事后监控并不能根本解决这个问题,需要从 CAP 定理角度进行平衡设计,引入事件驱动或 Pub/Sub 消息方式能在提高网络容错性的同时,保证数据最终一致性,柔性事务是微服务环境的主要选择。
传统服务变成铁板一块经常是因为事务处理要求,某个服务方法的代码很多,需要塞在同一个事务边界内,虽然这带来了高一致性的,但是扩展性比较差,因为同一个事务边界内的动作无法分离到几个微服务中,因此,使用微服务必须积极拥抱最终一致性,对分布式系统以及 CAP 定理有一定理解。当然,这些都是必须有多个微服务调用的情况下才需要考虑,由于微服务粒度小且专一,可以通过组合替代共享继承的思路,容忍代码有一定的重复性。
一个微服务架构需要具备以下条件:
基础监视 测量和健康检查
分布式日志 跟踪
针对每个服务,不只是隔离代码,还需要在构建 + 测试 + 打包 + 提交整个环节隔离。
能清晰定义每个服务的上下游、编译时间和运行依赖。
掌握如何构建、暴露和维护好的 API 和合约。
需要尊重 b / w 和 f / w 兼容性,即使你可能不同时是你生产的服务的消费者。
好的单元测试和更具有可读性
注意微服务与模块和库包区别,以及分布式整体型 monolith, 协同版本发布,数据库驱动继承的区别。
知道基础设施的自动化
需要基于 CI/CD 持续集成 / 持续递交的基础设施
服务划分:
根据业务能力界定服务的范围
根据领域驱动设计中子域的概念界定服务的范围
通讯模式:
使用基于 RPC 的同步通讯方式
使用异步消息进行服务间通讯
外部 API:
API 网关(API gateway) – 为每一类客户端提供一个访问服务的独特接口
服务前端的后端(Backend for front-end) – 为每一类客户端都提供一个独立的 API 网关
数据管理:
每个服务都拥有它私有的数据库特接口
服务之间共享同一个数据库
使用事件来维护服务间的数据一致性 事件溯源 /CQRS
运维监控:
服务的发现:通过第三方模块来进行服务实例信息到服务注册表的注册过程
分布式追踪(Distributed tracing)new – 在服务代码中针对每一个外部访问,都分配一个服务标识符,并在跨服务访问时传递这个标识符以供追踪分布式引发
断路器 (Circuit Breaker) – 当远端服务返回的故障率超过一定的阀值时,客户端代理(比如 API 网关) 对远程服务的调用将立刻返回失败的信息
以上就是微服务是什么意思,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。