全网AI资源网站搭建

电脑端+手机端+微信端=数据同步管理

免费咨询热线:13114099110

如何搭建一个简单模式的微服务架构?|InfoQ垂直号

发布时间:2023-10-23 10:04   浏览次数:次   作者:派坤优化

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图1)

作者|提供线索的编辑

编辑|专职编辑、社区编辑

微服务已经流行很长时间了,但网上很少有文章能够成熟地传播该技术,同时完美地照顾“微服务领域的新人”。 从0开始,用通俗易懂的语言讲解微服务架构系列。 因此,我们策划了这篇文章。 本文转载自InfoQ垂直账号《聊天架构》,ID:

我记得很久以前看到一位专家说:如果你做不到单体架构,就不要构建微服务架构。 乍一看这句话很有道理,但是后来发现这句话不太对,因为微服务架构的目的就是为了降低系统的复杂度,所以微服务架构应该比单体架构更简单、更好实践。 这是正确的。

在这篇文章中,我们将分享如何构建一个简单的微服务架构。

微服务架构的简单模式是什么?

与大型互联网平台轻松接收数万并发访问或每天多次发布在线版本相比,绝大多数企业和项目没有这样的需求。 他们关注的焦点是如何更好地提高开发效率、如何更快地实现新需求、如何更便捷地运维等。

微服务架构的简单模型就是能够满足上述需求的软件架构解决方案。

与“完美”的微服务架构方案相比,微服务架构的简单模型可以暂时忽略保证数据一致性的分布式事务技术、方便程序包在环境(开发、测试、生产)之间迁移的配置中心组件,和监控。 用于API调用的调用链组件、避免系统过载的断路器组件、方便API管理和测试的API文档框架、Redis、以及各种MQ。 只要关注经常提到的注册中心、服务发现、负载均衡和服务网关就可以了。

如何开始?

实施微服务架构时,重点是发挥优点并克服缺点。 与单体架构相比,微服务架构最大的缺点就是上手和运维困难。 我们从这两个方面来看看如何实现微服务架构的简单模型。

上手困难

与传统的单体架构相比,微服务架构一下子引入了太多的概念,让新手有些困惑。 因此,我们需要去掉本质,明确哪些是我们需要的,哪些只是世界上的传说。 我们来看看开发微服务架构的系统需要哪些组件。

首先我们来说说使用简单微服务模型进行开发的四个步骤:

第一步:使用组织中现有的技术系统开发单一职责微服务。

步骤2:服务提供者将地址信息注册到注册中心,调用者从注册中心拉取服务地址。

第三步:通过门户后端(服务网关)将微服务API暴露给门户和移动APP。

第四步:将管理模块整合为统一的操作界面。

为了实现以上4点,对应的是以下必须掌握的基础技术(所需组件)。

注册中心、服务发现、负载均衡

与单体架构不同,微服务架构是由一系列职责单一的细粒度服务组成的分布式网状结构。 服务通过轻量级机制进行通信。 这时候就必然会引入一个服务注册发现问题,也就是说服务提供者需要在某处(服务注册中心,)注册自己的服务地址,服务的调用者才能找到需要的服务的地址从服务注册中心调用(服务发现)。 同时,服务提供者一般以集群的方式提供服务,这就引入了负载均衡的需求。

根据负载均衡(Load,简称LB)所处位置的不同,目前主要有三种服务注册、发现和负载均衡方案:

集中式负载均衡解决方案

第一种是集中式LB方案,服务消费者和服务提供者之间有独立的LB。 LB通常由专门的硬件设备(例如F5)来实现,或者基于软件(例如LVS)来实现。

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图2)

当服务调用者调用服务时,向LB发起请求,LB按照一定的策略(如轮询、随机、最小响应时间、最小并发数等)将请求路由到指定的服务。 这种方案最大的问题是在调用方和提供方之间增加了一跳,LB极有可能成为整个系统的瓶颈。

进程内 LB 解决方案

第二个是进程内LB解决方案。 针对集中式LB的缺点,进程内LB解决方案将LB功能以库的形式集成到服务消费者进程中。 该方案也称为软负载(Soft Load)或客户端负载方案。

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图3)

原理是:服务提供者将自己的地址发送到服务注册中心,同时定期向注册中心发送心跳。 注册中心根据心跳情况决定是否将该节点从注册中心中删除。 服务调用者调用服务时,首先从注册中心拉取服务注册信息,然后按照一定的策略调用服务节点。

这样的话,即使注册中心宕机了,调用者也可以根据内存中已经拉取的服务地址将请求路由到正确的服务。 这种方案最大的问题是服务调用方可能需要集成注册中心的客户端。 以后注册中心服务器升级时,注册中心客户端可能需要升级。

主机独立LB流程解决方案

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图4)

三是主机独立LB工艺方案。 该方案是针对第二种方案的缺点而提出的折衷方案。 原理与第二种方案基本类似。 不同的是,它结合了LB和服务发现功能。 它被移出进程并成为主机上的独立进程。 当主机上的一个或多个服务想要访问目标服务时,它们都使用同一主机上独立的LB进程进行服务发现和负载均衡。 该解决方案的一个典型例子是服务发现框架。 该方案最大的问题是部署和运维繁琐。

以上三点摘自杨波老师的《我们实施微服务需要哪些基础框架?》 》

#,

做了一些补充。 如果想看这三个方案更详细的解释,建议看杨波老师的文章。

现在,随着微服务解决方案和云的兴起和成熟,第二种解决方案已经成为我们的首选。 我们建议将其用作服务注册中心快速搭建网站,用于客户端服务发现和负载平衡。

这种选择最大的优点就是简单+实用+可控。 不需要额外引入Etcd作为注册中心,部署和运维也比较简单。 从代码角度来看,使用起来也非常简单。

但需要注意的是,这种方案一般用于局域网内的负载均衡。 如果你想对互联网开放的服务进行负载均衡,可以使用Nginx。

以下是最重要的参数配置。 从这些参数中,你也可以大致了解它的工作原理。

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图5)

由于注册和过期机制的原因,服务从启动到完全可用需要近2分钟的时间。 因此,为了提高开发和测试环境中的发布速度,我们更改了以下参数。 生产过程中,必须改回来。

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图6)

注册中心界面如下:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图7)

详细信息请参考

服务网关

通常,大型系统中有许多具有单一职责的微服务。 如果门户系统或者移动APP调用这些微服务的API,至少要做两件事:

这需要一个服务网关。 2015年,我们使用Rest+做了一个简单的API网关。 原理是当API网关收到请求//api1.do时,将请求转发到对应微服务的api1接口。

后来我发现Cloud Zuul对我们实现的功能有更好的实现,所以就改用了Zuul。 Zuul是一个基于Java开发的服务器端API网关和负载均衡器。

此外,Zuul还可以动态加载、编译和运行过滤器。 最让人惊讶的是Zuul的转发性能据说和Nginx差不多。 可提供详细信息。

一般来说,API网关(可以称为门户后端)用于反向代理、权限认证、数据剪枝、数据聚合等。

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图8)

管理一体化框架

掌握了注册中心、服务发现、负载均衡和服务网关技术后,微服务已经可以为门户系统和移动APP提供可靠的服务。 然而,后端操作员使用的管理终端是如何实现的呢?

由于后端操作系统压力不大,我们可以使用CAS和UPMS(UPMS是我们团队开发的一款贴合微服务架构的用户和权限管理系统,我们会在清流云官网分享,欢迎关注)。 服务是一体化的。

集成微服务的基本三步过程是:

引入基于Boot的微服务,其中包括系统的顶部和左侧菜单。

将微服务的访问地址注册到UPMS中,该地址作为该微服务的入口菜单(一级菜单)。

配置UPMS中微服务的功能菜单和角色权限信息。

当用户从浏览器打开一个微服务时,会调用UPMS的API拉取所有微服务的列表(一级菜单)和当前微服务的功能列表(二级菜单),并将当前微服务页面放入内容。 区域显示给用户。

应用架构图:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图9)

UPMS截图,橙色部分是UPMS框架提供的,红框是微服务页面:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图10)

UPMS通过“模块”功能连接新的微服务:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图11)

所以,最终,一个基于微服务架构的简单系统可以是这样的:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图12)

至此,基本的微服务架构已经搭建完成。 下面我们来说说如何解决微服务运维问题。

操作和维护困难

微服务架构的运维问题主要是相对单体架构而言的。 因为实施微服务架构之后,整个系统突然比以前多了很多模块。 当模块数量增加时,部署和维护的工作量就会增加。 因此,要解决运维难的问题,首先可以从自动化的角度来解决。

此外,如果想要更好地发挥微服务架构的优点、扬长避短,建议准备一个可靠的基础设施,包括自动构建、自动部署、日志中心、健康检查、性能监控等功能。

否则,很有可能微服务架构的缺点会导致我们团队对微服务架构失去信心,回到单体架构的老路。 工欲善其事,必先利其器。 这真的很重要。

持续集成

单个应用转型为微服务后,很可能原来的一个程序包会被分割成10个、20个甚至更多的程序包。 嗯,我们遇到的第一个麻烦就是部署工作直接扩大了10-20倍。 这时,持续集成方法和工具就成为实现微服务架构的前提。 在实践中,我们利用容器服务平台来自动部署整个系统的微服务。 流程如下:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图13)

如果没有微服务支持平台,也可以通过shell脚本调用API和API。

主要流程为:

调用命令从代码仓库拉取代码并打包代码。

调用/build和//push命令构建镜像并将镜像推送到私有镜像仓库。

调用 // 和 //start 命令创建并启动容器。

配置中心

在开发/测试环境中,程序包已被打包成镜像。 如果通过测试的镜像可以直接推送到生产环境,就可以直接省去生产环境的重复打包和部署工作。 岂不是很美吗?

如果需要达到这样的效果,就需要将程序包打包成环境无关的。 也就是说程序包中不能有环境相关的配置信息,这也引入了配置中心组件。

这个组件非常简单。 它只是根据项目代号、环境代号和微服务代号获取微服务所需的键值对。 例如:

..网址。

使用配置中心的另一个重要附加价值是不同环境的配置信息可以由不同的人管理,这增强了生产环境的配置信息的安全性,例如数据库帐户和密码。

这个模块还有一些开源项目可供参考,比如百度、云等。 我们采取了重新发明轮子的精神,开发了配置中心微服务,可以轻松地与上面提到的UPMS集成。

注意:该组件不是微服务架构简单模型的必需组件,只是推荐组件。

监控报警

单个应用改造为微服务后,单个应用被拆分为很多微服务,系统的健康检查、性能监控、业务指标健康度、文件备份监控、数据库备份监控、定时任务执行监控等都发生了变化。 困难。

因此,为了让运维同学过得更加踏实,最好搭建一个监控平台。 如果你想快速搭建一个监控平台快速搭建网站,可以考虑。 如果你想要更好的可扩展性和可定制性,可以考虑使用以下组件来构建:

如何搭建一个简单模式的微服务架构?|InfoQ垂直号(图14)

它是一个主机、数据库、网络和存储指标收集器。 最多 1653 颗星。

它是一个很棒的 JVM 指标收集器,提供了很多模块为第三方库或应用程序(如 Jetty、Log4j、JDBI)提供辅助统计信息,还可以发送测量数据并提供图形。 化监控。 获得 5000 多颗星星。

它是一个容器指示器收集器,由 . 获得 6000 颗星星。

是一款非常漂亮的开源仪表板工具,支持MySQL、MySQL等多种数据源。 获得 17,000 颗星星。

是一个优秀的开源分布式时间序列数据库,目前在时间序列数据领域排名第一。 其功能之一就是可以自动清除不需要的历史数据,非常实用。 11175星上。

除了上述模块之外,我们还开发了一个模块来检测应用程序的健康度和性能,当主机、程序健康度、程序性能等各项指标出现异常时向运维人员发出警报。

写在最后

读完本文,我们回过头来看,我们只需要在开发层面了解注册中心、服务发现、负载均衡、服务网关和管理集成框架,在运维层面准备持续集成工具等级。 、配置中心以及监控报警工具,您可以轻松实现微服务架构,享受微服务架构带来的精彩。 大家玩得开心。

关于作者

苏淮,微信ID,清流云研发总监,目前就职于神州数码清流云团队,曾就职于新加坡电信等公司。 擅长容器技术、微服务架构、敏捷开发和技术管理。

今天的推荐

点击下图阅读

CTO 和工程副总裁有什么区别?

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。