热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务_瞎干,就完了!迈好微服务化的第一步

篇首语:本文由编程笔记#小编为大家整理,主要介绍了瞎干,就完了!迈好微服务化的第一步相关的知识,希望对你有一定的参考价值。子曾经曰过:工欲善其事,必先利其器。要做微服务架

篇首语:本文由编程笔记#小编为大家整理,主要介绍了瞎干,就完了!迈好微服务化的第一步相关的知识,希望对你有一定的参考价值。


子曾经曰过:工欲善其事,必先利其器。要做微服务架构的转型,不是“干就完了”,而应该“谋定而后动”。之前我们谈到过,微服务化的转型是一个量变引起质变的过程,这就意味着微服务转型不是逐个拆分和替换就能解决的,微服务化转型的难点在于统一管理控制。

那么,对应前两篇文章中提到的微服务转型的烦恼和误区,怎样通过统一管理解决微服务化难点,我们认为要做到以下四点:

  1. 统一应用服务管理:将敏态、稳态的所有业务系统、所有不同框架的应用服务统一管理和展示,这是建设的最基本目标,也是最核心的目标,其他的全部围绕这里展开。
  1. 统一权限控制管理:这里的权限控制是指服务间调用的访问权限控制,通过不同的控制维度,最终达到稳态、敏态、异构框架、异构协议间的访问,做到服务间通信的自由控制和动态生效。
  1. 统一技术架构规范:尽管现状是极其的五花八门,但是我们的最终目标还是想要统一技术架构。目前包括银行在内的较多的企业机构,都存在 SOA、独立的单体应用系统、独立的通信协议和报文,也许还有 SpringCloud 的微服务和 Dubbo 的微服务并存,但是不管有多少种架构和体系,我们要做的就是先兼容,后统一。那么在统一之前,我们需要先立规范。
  1. 统一设计服务化系统:这里就涉及了容易“谈虎色变”的拆分问题,拆分首先是整体的考虑,功能模块的复用率、业务量、独立性,都是考量的范围。服务化的未来是中台,独立的考虑某一个业务系统,对中台化毫无帮助,所以需要统一的设计和建设,这也是云原生的基本理念。

这“四个统一”基本上已经覆盖了微服务化建设的所有工作。那么这四个统一应该从哪里入手呢?

应用服务的管理依赖于服务发现,微服务间访问控制依赖于通信架构,服务发现和通信架构基本上被微服务框架所决定。因此微服务建设的第一步就从微服务框架入手,制定统一的微服务架构和通信规范,用于新系统的建设,对于老系统就一边逐步改造,一边兼容现状。

接下来进入本文的重点,统一技术架构规范需要从以下方面开始建设:

01

微服务

统一微服务框架规范

首先,微服务多数是需要依赖于微服务框架的,说“多数”是因为在微服务的理念下,只要是分布式的、独立运行又互相依赖的应用服务,都可以叫做微服务。这里微服务框架提供了一些功能的便利,如服务发现、服务间通信、负载均衡策略等通信治理的功能。因此,微服务框架的选择会影响到注册中心和通信协议的选型。

这里有必要罗列一下目前使用较多的两种框架 SpringCloud 和 Dubbo: SpringCloud上手比较简单,通信采用 http 协议,配套组件很丰富,而且社区比较活跃,比较适合数字化转型中的企业使用;如果选用 Dubbo 框架,则服务间通信协议为一种基于 RPC的 Dubbo 协议,配套的组件较匮乏,社区曾停更过一段时间,但是使用习惯的人在编程时很舒服,服务间调用跟工程内调用没有差别,比较适合 Dubbo 老手使用。另外,使用 SpringCloud 框架,在做能力开放场景中,http 的协议更容易发布在 OpenAPI上,Dubbo 则不得不增加协议转换。

总之,需要先确定好企业级微服务框架及版本,并推行企业内部适配和使用,以此规范通信协议。

02

微服务

统一注册中心建设

微服务间通信依赖于注册中心的服务发现,微服务通过注册中心寻址,才能实现服务间互访。在微服务化建设过程中,统一注册中心的建设会遇到很多复杂的情况,如跨网络、跨业务域等问题会增加建设的难度。

注册中心的健康检测功能需要与应用服务做通信连接,因此注册中心的搭建需要考虑企业内部的网络现状。通常的解决方案是每个网络区域建设一套注册中心,当然如果考虑其他的因素,也可以将注册中心之间打通。

那么在同一个网络区域内,如果需要业务域的隔离,就不适合再部署多套注册中心去解决了,那样会增加管理和建设难度,并且极大的增加资源的消耗。解决方法跟具体使用的注册中心有关,我们以 SpringCloud 框架为例,注册中心可以选择 Eureka、Nacos、Consul,分别看一下对应的解决办法:

Consul 中可以划分数据中心,通过 token 划分权限,以此区分不同的业务域,但是 Consul 注册中心在中国已经渐渐要走下舞台的趋势;

Nacos 中有叫做 namespace 的概念,将注册的服务划分开,但是 namespace 的功能需要使用 mysql 存储;

Eureka 却没有类似隔离,或者划分区域的功能,但是我们依然可以通过访问控制,通过白名单的方式阻止业务域间服务的互访功能。

注册中心的建设就暂且记录这些。

03

微服务

统一配置中心建设

微服务的使用一直离不开配置中心,建设统一配置中心与建设注册中心较为类似。在组件选型上也较为简单和统一,多数都使用携程 Apollo,功能比较强大,可以适合各种场景。当然也有使用 SpringCloud 全家桶中的 config 组件的,但是作为全企业统一的配置中心,组件还是使用 Apollo 较好。

作为统一配置管理的功能组件,Apollo 还是比较好用的,但是作为企业级微服务建设的一部分,服务配置的使用场景就有点不恰当。从使用方法上来说,在 Apollo 中创建一个 APPID,也就是一个配置单元,至于这个配置单元是作用于一个微服务,还是作用于一个业务域,在 Apollo 中没有概念。

因此,我们基于携程 Apollo 组件作为配置的基础原件,真正的业务功能是需要在应用服务管理平台中实现的。

04

微服务

统一观测平台建设

观测应该至少包括监控、链路、日志,那这里的统一观测是指的统一监控平台吗?其实不算是。微服务建设中观测平台是必须建设的一部分,其主要关注点在于服务间通信中的性能监控、服务间调用拓扑、业务调用链追踪,以及业务调用中的业务日志,当然还有性能的告警。这些在微服务运行观测中必不可少,但与统一监控平台还有些差距。

现在有很多 APM 厂商可以提供微服务的相关监控,包括资源、性能、浏览器、线程、app,当然也有拓扑图、链路图等等。其实刚刚介绍的这每一个建设模块,如果做到极致都可以单独作为一个项目建设,比如之前我们基于 gRPC 自研的微服务框架,比如在某银行做的微服务配置管理中心等等。

APM 更是很多企业单独立项的,但是在这里可能不太适合。因为我们的主要目的是微服务的运行观测,那么微服务运行状态数据来源是注册中心,运行性能数据来自 APM,运维策略基于配置下发,依赖于配置中心做运维反馈。那么这三方面的数据在注册中心注册的是服务名,在 APM 中是手动输入的业务名,在配置中心是 APPID,只要三个名字对不齐,就会对使用造成一定的难度,然后就会被废弃不用。

因此,观测平台的建设目标就是一定要“观”起来,所以需要与统一应用服务管理共同建设。

最后总结下,微服务框架、注册中心、配置中心、运行观测都是微服务的工具组件,这四个组件的搭建奠定了微服务改造的技术规范和运行治理规范,因此这是微服务建设的第一步。基于这几个工具组件建设的统一应用服务管理,将是微服务化项目建设的主要内容,我们将在下一篇文章中做详细介绍。

点击BoCloud博云了解更多解决方案


推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • “您可以从三个选项中(快速、便宜或好)选择两个”提出这个问题的人可能不是可观测性工程师。但也可能是,在可观测性方面,决定您 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
author-avatar
aijunli2502898197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有