当前位置: 首页 > 科技观察

开源微服务框架你知道几个?

时间:2023-03-15 19:22:34 科技观察

诞生于2014年的“微服务架构”。其思想由MartinFowler阐述后,近年来不断受到关注,理论和相关实践不断发展。目前,它已经成为主流的软件架构模型。什么是微服务架构并没有明确的定义,每个从业者都有自己的理解,但是有人给出的一个公式值得思考:微服务架构=80%SOA服务架构思想+100%组件架构思想+80%领域建模思维微服务架构有很多优点,比如业务解耦,提供更高的灵活性,在服务频繁发布的同时,可以保持系统其他部分的可用性和稳定性;解耦的编程语言,针对不同的业务,可以使用更适合的语言进行开发;解耦开发团队,每个团队负责一个微服务,互不影响,加快交付。关于微服务架构,网上的资料还挺多的(因为现在很火,而且各个公司都有实战案例分享),读者可以单独参考,这里就不赘述了。下面为大家罗列了目前最流行、提及频率最高的开源微服务开发框架,希望对开发者有所帮助(点击项目名称可直接跳转到介绍页面):SpringCloudSpringCloud为开发者提供它提供开发分布式系统配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、决策竞选、分布式会话和集群状态等工具。使用SpringCloud开发者可以快速实现上述模式。EclipseMicroProfileEclipseMicroProfile是Java微服务开发的基本编程模型。它致力于定义企业Java微服务规范。MicroProfile提供指标、API文档、健康检查、容错和分布式跟踪等功能。服务可以自由部署在任何地方,包括Istio等服务网格架构。DubboDubbo是阿里开源的一款高性能RPC框架。其特性包括基于透明接口的RPC、智能负载均衡、自动服务注册和发现、高扩展性、运行时流量路由和可视化服务治理。TarsTars是腾讯内部微服务框架TAF(TotalApplicationFramework)多年实践成果总结而成的开源项目。它被腾讯内部数百个产品使用,服务于数以千计的C++、Java、Golang、Node.Js和PHP开发人员。它包括一套完整的开发框架和管理平台,兼顾了多语言、易用性、高性能和服务治理。这个想法是让开发更专注于业务逻辑,让运营更有效率。HelidonHelidon是Oracle开源的一个微服务框架。编写的微服务运行在Netty支持的快速网络核心上。SOFAStackSOFAStack?(ScalableOpenFinancialArchitectureStack)是蚂蚁金服开源的一套用于快速构建金融级分布式架构的中间件。也是在金融场景中锻炼出来的最佳实践。gRPCgRPC是一个由谷歌开源的高性能通用RPC框架。gRPC是基于HTTP/2标准设计的,在单个TCP连接上带来了双向流、流量控制、报头压缩和多路复用请求等特性。这些特性使其在移动设备上表现更好,节省电力并节省空间占用。ThriftThrift是一个用于开发可扩展和跨语言服务的RPC框架。它结合了强大的软件堆栈和代码生成引擎,可以在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk和OCaml等语言之间无缝构建。结合高效的服务。brpcbrpc是百度内部最常用的工业级RPC框架。它有1,000,000多个实例(不包括客户端)和数千个服务。在百度里面叫做“baidu-rpc”。目前,只有C++版本是开源的。以上列举的主要是一些微服务架构的开发框架或者对微服务架构至关重要的RPC框架。其实微服务涉及到分发,又涉及到各种中间件,数量太多了。太大了,下次再说吧。但是这里有一个方面必须要指出,那就是ServiceMesh。现在说到微服务架构,一般都会涉及到ServiceMesh的相关内容。ServiceMesh被誉为“下一代微服务架构”。它起源于早期服务代理模型Sidecar的扩展。虽然它的概念由来已久,但是直到近两年微服务迅速兴起,Buoyant创建了Linkerd并对其进行了重新诠释,才逐渐以全新的姿态呈现在世人面前。ServiceMesh侧重于Mesh,强调在Sidecar的基础上各个代理之间形成的有机网络。以通用组件的形式管理和控制系统中所有服务通信流量,同时下沉微服务开发的技术栈,可以语言无关,功能可扩展。通过一个网格,ServiceMesh可以不断延伸服务治理的各个环节和微服务架构构建中的各个环节,最终成为微服务开发的完整解决方案。这里也列举几个目前在ServiceMesh领域稳居主流的开源项目:LinkerdLinkerd是一个提供弹性云原生应用ServiceMesh的开源项目,也是一个开源的微服务RPC代理。它的核心是透明代理。EnvoyEnvoy是一个开源的云原生应用的边缘和服务代理,最初由Lyft构建,它是一个高性能的C++分布式代理,专为单一服务和应用而设计,适用于大规模微服务ServiceMesh架构通信总线和公共数据飞机。IstioIstio项目可以为微服务架构提供流量管理机制,也可以为其他增值功能(包括安全、监控、路由、连接管理和策略等)创造基础。该软件使用经过验证的LyftEnvoy代理构建,无需启动应用程序代码即可提供可见性和控制。ConduitConduit是一个超轻量级的KubernetesServiceMesh,它的目标是成为最快、最轻、最简单和最安全的ServiceMesh。它使用Rust构建快速安全的数据平面,使用Go开发简单而强大的控制平面,整体设计围绕性能、安全性和可用性展开。它透明地管理服务之间的通信,为可测试性、可靠性、安全性和弹性提供支持。尽管与Linkerd类似,但数据平面是在应用程序代码之外运行的轻量级代理,而控制平面是高可用控制器。不过与Linkerd不同的是,Conduit的设计更倾向于Kubernetes中的低资源部署。注:0.5版本发布后,后续的Conduit已经集成到Linkerd2中。具体查看:Conduit0.5已经成为压轴,后续集成到Linkerd2.0中其实已经成为目前业界对构建的共识服务网格。从下面这些项目往这个方向的演化可以大致理解:WeiboMeshMotan是新浪微博开源的一套高性能、易用的分布式RPC框架。后来WeiboMesh在MotanAgent的基础上进化而来。WeiboMesh偏向于服务治理,同时提供对服务的动态管理能力,如服务降级、动态配置、权限管理、数据采集、服务指令处理等。DubboMeshDubbo在v3中开发了ServiceMesh。官方希望DubboMesh进入Envoy社区。目前Dubbo协议已经得到Envoy的支持。数据层选址、负载均衡和服务治理的工作还在继续。控制层目前正在丰富Istio/Pilot-discovery。SOFAMOSNMOSN是SOFAStack的一个组件。它是一个用Go语言开发的ServiceMesh数据平面代理。它的功能和定位类似于Envoy。它旨在提供分布式、模块化、可观察和智能代理能力。MOSN支持Envoy和Istio的API,可以与Istio集成。nginMeshginMesh是NGINX开源的ServiceMesh解决方案,提供了基于NGINX的ServiceMesh实现。nginMesh兼容Istio,使用NGINX实现Sidecar代理,集成在Istio中,以标准、可靠和安全的方式促进服务之间的通信。注意:nginMesh项目不再积极开发。MicroProfileServiceMeshMicroProfileServiceMesh是MicroProfile的ServiceMesh规范。MicroProfile定义了一系列用于开发云原生微服务的规范。本质上,它也是Istio的一种微服务编程模型,Istio本身就是ServiceMesh的代名词。本规范侧重于服务网格,更多的是Istio。AmbassadorAmbassador是一个基于Envoy构建的Kubernetes原生API网关,专为微服务而设计,它本质上是一个Envoy入口控制器,但具有更多功能,包括支持gRPC、HTTP/2和WebSockets,支持CORS、超时、加权轮询调度,粘性会话和速率限制等。GlooGloo是基于Envoy的Kubernetes原生入口控制器和下一代API网关。Gloo擅长功能级路由,支持传统应用程序、微服务和无服务器。Gloo的独特设计是为了支持混合应用程序,多种技术、架构、协议和云可以共存。KongKong在1.0GA时带来了ServiceMesh能力。用户不仅可以将Kong部署为API网关,还可以将其部署为独立的ServiceMesh代理。Kong插件可以提供ServiceMesh开箱即用的关键功能,可以与其他云原生技术集成,包括Prometheus、Zipkin、健康检查、金丝雀测试和蓝绿测试等。ConsulConnectConnect是ServiceConsul中的网格解决方案可自动将任何现有的Consul集群转换为服务网格解决方案。Connect通过自动TLS加密和基于身份的身份验证实现安全的服务到服务通信。借此机会感谢以ServiceMesher为代表的社区为ServiceMesh在中国的普及和发展所做的贡献。