微服务拆分

微服务拆分,第1张

从上图可以看出单体架构的问题可以通过微服务化拆分来解决。

随着商业模式逐渐得到验证,产品获得了市场的认可,为了加快产品的迭代效率,团队开始引进更多的研发人力,此时业务已经达到了一定的复杂度,单体应用已经无法满足业务增长的需求,研发效率开始下降,这是就是需要考虑服务拆分的时机点。

服务拆分的落地还需要提前准备好配套的基础设施,比如注册中心、配置中心、日志系统、持续交付、监控系统、分布式定时任务、CAP 理论、分布式调用链、API 网关等等;

人才的储备和观念的变化也得同时跟上

服务拆分不仅仅是技术的升级,更是开发方式、组织架构、开发观念的转变

服务拆分粒度太细会增加运维复杂度,粒度过大又起不到效果,如何平衡拆分粒度呢?

产品初期阶段,业务逻辑并没有足够复杂到2~3人没法维护的地步,这时我们没有必要将业务继续拆分的更细,但随着业务的发展,业务逻辑变的越来越复杂,可能同时服务多个平台,这时你会发现服务面临各种问题,这个阶段就需要将服务拆分为更细粒度的服务。虽然业务复杂度已经满足了,但如果没有足够的人力,服务最好也不要拆分,拆分会因为人力的不足导致更多的问题,如研发效率大幅下降。

一个服务需要几个开发维护是比较理性的?

三个火q手原则

三个火q手原则主要应用于微服务设计和开发阶段

拆分策略可以按功能和非功能维度考虑,功能维度主要是划分清楚业务的边界,非功能维度主要考虑六点:扩展性、复用性、高性能、高可用、安全性、异构性。

纵行拆分(基于业务逻辑拆分)
从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务

横向拆分
从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务 耦合。

按领域模型拆分
按领域模型拆分主要是划分清楚业务边界,主要分四步:
1、找出领域实体和值对象等领域对象
2、找出聚合根,根据实体、值对象和聚合根的依赖关系,建立聚合
3、根据业务及语义边界等因素,定义限界上下文
4、每一个限界上下文可以拆分一个对应的服务,但是也要考虑一些非功能因素

扩展性
区分系统中变与不变的部分,不变的部分一般是成熟的、通用的服务功能,变的部分一般是改动比较多、满足业务迭代扩展性需要的功能,我们可以将不变的部分拆分出来,作为公用的服务,将变的部分独立出来满足个性化扩展需要。
二八原则:经常变动的部分大约只占20%,剩下的80%基本不变或极少变化

复用性
不同的业务里或服务里经常会出现重复的功能,比如每个服务都有鉴权、限流、安全以及日志监控等功能,可以将这些通用的功能拆分出来形成独立的服务,也就是微服务里面的API网关。

可靠性
将可靠性要求高的核心服务和可靠性要求相对低的非核心服务拆分开来,然后重点保护核心服务的高可用。

高性能
将性能要求高或者性能压力大的模块拆分出来,避免性能压力大的服务影响其他服务。常见的拆分方式和具体的性能瓶颈有关,例如电商的抢购,性能压力最大的是排队功能,可以将此独立成一个服务;对于读写差异比较大的服务,也可以基于读写分离来拆分;基于数据一致性拆分,将强一致性的业务尽量放在一个服务中,弱一致性通常拆分为不同的服务

安全性
不同的服务可能对信息安全有不同的要求,因此把需要高度安全的服务拆分出来,进行区分部署,可以更有针对性地满足信息安全的要求,也可以降低对防火墙等安全设备吞吐量、并发性等方面的要求,降低成本,提高效率

异构性
对于开发语言种类有要求的业务场景,可以用不同的语言将其功能独立出来实现一个独立服务

以上拆分方式可以根据实际情况自由排列组合使用。拆分不仅仅是架构上的调整,也意味着要在组织结构上做出响应的适应性优化,以确保拆分后的服务由相对独立的团队负责维护

一个系统现在拆分出来的服务粒度也许合适,但随着时间的流失,系统需要不断的适应新的业务发展阶段,我们对系统领域的了解也越来越深,之前拆分的服务粒度可能就不合适了。例如业务的增删导致、过多的进程间通信导致效率低下等因素。

人员和服务数量的不匹配导致的维护成本增加,也是导致服务合并的一个重要原因。

服务数量过多和资源不匹配,则可以考虑合并多个微服务到一个服务包,部署到一台服务器,这样可以节省服务运行时的基础资源消耗,也降低了维护成本。 需要注意的是,虽然服务包是运行在一个进程中,但是服务包内的服务依然要满足微服务定义,以便在未来某一天要重新拆开的时候可以很快就分离

本篇文章为NETCore实现企业级微服务架构技术点介绍

Consul是一个分布式,高可用、支持多数据中心的服务注册、发现、健康检查和配置共享的服务软件。

由 HashiCorp 公司用 Go 语言开发 推出的开源产品

用于实现分布式系统的服务发现、服务隔离、服务配置。

这些功能中的每一个都可以根据需要单独使用,也可以同时使用所有功能。Consul 官网目前主要推 Consul 在服务网格中的使用。

与其它分布式服务注册与发现的方案相比:

Consul 的方案更“一站式”——内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具。

Consul 本身使用 go 语言开发,具有跨平台、运行高效等特点,也非常方便和 Docker 配合使用。

与市面上其他系统比较如下:

使用Consul 的优势

使用 Raft 算法来保证一致性, 比复杂的 Paxos 算法更直接。相比较而言, zookeeper 采用的是 Paxos, 而 etcd 使用的则是 Raft。

支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟, 分片等情况等。zookeeper 和 etcd 均不提供多数据中心功能的支持。

支持健康检查。etcd 不提供此功能。

支持 >

微服务是近些年被广泛提及的一个概念, 微服务架构可以理解为一个轻量级的服务治理方案, 也就是将系统的功能,通过服务的形式发布到服务器上,对服务进行组合调用,实现具体的功能,解决实际业务问题的架构风格。

微服务产生于单体应用的扩大化,随着信息化不断发展,企业对软件功能的要求越来越具体,也愈发的细致,如果通过应用程序来实现,必然是一个极其复杂而又痛苦的过程,由此诞生了微服务的概念。就是 将功能发布成服务,应用程序通过调用不同的服务来实现业务, 这种设计架构称之为微服务。

微服务架构的优点在于每个服务可以有独立的团队开发,服务之间互不干涉,保障了系统的稳定性。由于功能被拆分到更细的粒度,有效的降低了程序的复杂程度,对硬件的需求也随之降低,但是微服务也有一些不足,比如服务调用带来的系统复杂性,服务间的依赖关系也是难以管理的,如何构建合理的服务依赖是考验架构师能力的重要依据;最后,微服务架构的部署以及跟踪也是很难的。总之, 微服务架构有着自身的应用场景以及特点,了解哪些场景适合微服务比掌握微服务的具体技术更为重要, 适当的技术用在适当的场景,才能发挥合适的价值。

微服务架构是当前最流行的技术架构,主要组件有注册中心、网关、配置中心和各种微服务模块。架构灵活、易扩展、可动态扩容。

在微服务之前,系统架构经历很长时间的演变,简述如下:

1无架构

页面逻辑和业务逻辑混在一起,甚至页面直接访问数据库。

优点:因为没有太多的访问路径转换,效率是最高的;

缺点:没有分层,逻辑混乱,维护难,扩展难。

2MVC

架构

单系统,表现层、逻辑层、业务层分开,各层分工协作。

优点:逻辑清晰、分工明确、易维护。

缺点:系统集中部署,属于强耦合,某些业务模块出现异常时,会导致整个系统无法访问。

3SOA架构

面向服务的架构,多个系统分布式部署,通过消息总线进行通讯。

优点:各个系统的业务相对独立,耦合低;

缺点:消息总线负担太重,中心化太重,接口缺乏规范。

4微服务架构

一个系统,按照粒度规划,划分为很多的微服务,而每个微服务,对应一个具体的业务实现,并可拥有自己独立的数据库,整个就是微服务架构。

优点:如上,架构灵活、易扩展,在实际运营时,按需扩容,集群部署。各个微服务业务互不影响,耦合性低;

缺点:开发成本高,对部署有一定的专业性要求。


从技术而言,微服务已经是一个设计理念很成熟的架构,可满足不同层次,不同业务场景的需要,而且经过多个版本的迭代,该踩的坑也基本踩完,生态系统完整,开源组件选择多多,很有一统天下的趋势,值得尝试。


但,不要为了微服务而微服务,要根据自己实际的要求去做抉择和取舍。

比较,适合自己的,才是最好的!

微服务是近几年技术社群讨论很多的一种软件架构方式,可以说是SOA的现代版本、 时尚 版本。不过这次浪潮不是由大公司倡导的,而是由工程师们引领的。比如,它采用工程师们熟悉的RESTful接口,而不是笨重的WebService,也不需要一大堆昂贵的中间件。

那微服务为什么流行起来?按理说它们都是让软件更加模块化,使相互之间保持松耦合,从而优化系统架构。

国内流行起来的微服务架构——RestCloud

RestCloud 为了保证服务不注册中心癿高可用性,服务不注册中心通过水平扩展癿能

力允许对服务不注册中心迚行集群配置,开在网关层做了服务癿注册癿数据缓存。

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中癿一部分,它基于 Netflix Eureka做了二次封装。主要负责完成微服务架极中的服务治理功能。



易用性

如果你目前使用SpringBoot开发API服务则无需修改任何代码,只需引入RestCloud配置中心的jar包即可由配置中心接管所有配置,对开发人员无任何感知,如果你使用RestBoot开发平台开发API则已经是天然集成了配置中心的客户端Jar包无需任何依赖。 如果你使用php,c#开发目前RestCloud并没有提供现成的解决方案,你需要通过Rest API来接入RestCloud配置中心并自已在本地实现配置缓存管理。

稳定性

RestCloud采取全新的本地配置持久化技术,保证配置中心不会形成单点故障,因为所有的配置数据在应用则具有本地缓存和持久化技术,假定RestCloud配置中心出现故障且长时间未能恢复的情况下,应用则的程序会自动读取本地缓存配置数据 进一步假定这时应用也刚好出现故障需要重启,则本地缓存在重启后将会消失,这时应用将自动从持久层再次读取配置数据到缓存中从而恢复运行,所以RestCloud配置中心不会出现故障后影响应用的运行,RestCloud配置中心优于目前开源的大多数配置中心解决方案。

易用性

如果你目前使用SpringBoot开发API服务则无需修改任何代码,只需引入RestCloud配置中心的jar包即可由配置中心接管所有配置,对开发人员无任何感知,如果你使用RestBoot开发平台开发API则已经是天然集成了配置中心的客户端Jar包无需任何依赖。 如果你使用php,c#开发目前RestCloud并没有提供现成的解决方案,你需要通过Rest API来接入RestCloud配置中心并自已在本地实现配置缓存管理。

稳定性

RestCloud采取全新的本地配置持久化技术,保证配置中心不会形成单点故障,因为所有的配置数据在应用则具有本地缓存和持久化技术,假定RestCloud配置中心出现故障且长时间未能恢复的情况下,应用则的程序会自动读取本地缓存配置数据 进一步假定这时应用也刚好出现故障需要重启,则本地缓存在重启后将会消失,这时应用将自动从持久层再次读取配置数据到缓存中从而恢复运行,所以RestCloud配置中心不会出现故障后影响应用的运行,RestCloud配置中心优于目前开源的大多数配置中心解决方案。

网站链接:>Eureka是奈飞经典的注册服务,可以用作注册服务的还有:

封装好了,使用极其简单,参考如下例子即可
>物联网云平台扮演着“物”与IT流程和业务流程之间的中介角色,能够促使企业具备变革性的数字业务创新能力。具体来说,物联网云平台不仅仅是把物联网设备和软件紧密结合在一起,还能优化整个业务流程管理,如业务流程编排、工作流协调、数据交换等,加速解决业务中的实际问题。
为了从物联网中提炼更多的价值,企业应该尝试寻找一个大的、长期存在于市场中的物联网云平台合作伙伴。而机智云作为第三方物联网云平台代表,拥有超过10年、上万方案、千万级设备接入的物联网云平台建设经验,沉淀为工业级稳定、安全的AIoT云平台。平台采用微服务架构,在云端部署可自由组合的应用组件,实现设备接入与管理、海量设备实时数据分析,SLA高达999%,兼容主流通信协议。平台架构灵活,支持公有云、私有云和混合云部署,具备AI边缘计算能力,支持边云协同。平台提供横向扩展的能力,支持设备量的不断增加和设备接入后的各类应用。同时,平台遵循开放设计原则,企业可以基于API接口进行二次开发,平台OPEN API可打通企业管理系统,数据归属厂家。目前,机智云平台服务覆盖消费电子、工业智能、共享设备和智慧渔业等行业,能够根据行业属性为企业提供一站式的智能化解决方案。

随着微服务的兴起,我们强调业务(服务)进程的隔离性,且为了保证服务的高可用和高性能,避免单点事故,我们常常都会通过冗余的方式,会启多个进程来提供相同的服务。那么在基础设施层面来说,我们通常有以下几种方式:

整体平台演进路线图,概括如下:

支持多种事件源触发机制,事件获取既有“推”又有“拉”的方式。

同步调用方式:

异步调用方式:

运行时异常的捕获

提供了Dead Letter Queues机制,以防止数据的丢失,方便做事后补偿(可以是自动或者人工的方式)。

关于微服务架构的文章相信大家应该看过不少了,其中关于微服务的架构技巧以及开发工具的介绍也有很多。今天,北京电脑培训就给大家汇总了一下,其中适合微服务架构的工具都有哪些种类,一起来了解一下吧。



API管理和测试

1APIFortress

APIFortress是API测试和健康检测工具,为企业级API提供自动化的功能测试、健康检测和负载测试。它的设计原则是无代码,完全基于现代API架构实践和模式而构建。

2Postman

Postman是面向个体开发者和团队的API开发套件,可让你轻松运行UI驱动的API测试。Postman还是一个功能强大的>

3Tyk

Tyk是一款开箱即用的开源API管理平台,速度快,可伸缩。无论是部署在内部,还是部署在云端,或者使用两者的混合,对Tyk来说都不在话下。除了可以降低管理成本,Tyk还将为你带来高可用性和低延迟。

消息服务

4RabbitMQ

RabbitMQ可作为微服务之间的通信桥梁,它支持各种模式,可提高应用程序的可伸缩性,并解决大多数分布式系统都存在的问题。RabbitMQ可用在微服务环境或任何其他分布式系统中。你还可以使用这个工具在服务之间交换事件。

5亚马逊简单队列服务(SQS)

亚马逊SQS提供了强大、灵活且可靠的微服务通信机制。作为一种基于发布订阅的微服务通信模型,亚马逊SQS可以帮助开发人员解决很多问题。除了更好的安全性之外,队列还通过为待处理消息提供储存来增强可靠性。

6ApacheKafka

消息队列对于微服务架构来说是非常重要的,可用来处理微服务之间的通信以及微服务与外部源之间的通信,不管是密集型的数据处理还是API调用。ApacheKafka是一个具有高容错和d性的分布式流处理平台。

面向过程:POP(procedure oriented programming)
面向对象:OOP(object oriented programming)
面向服务:SOA(service-oriented Architecture)

所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。微服务设计原则:1、各司其职 2、服务高可用和可扩展性。

微服务的优点


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/10672412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存