1 前言
微服务架构在互联网行业已经基本上是标配,但是在传统的制造企业或做ToB的软件服务商来说也是一个新的探索方向。很多大型企业随着规模的壮大,业务量不断的增加,传统的单体架构已经无法满足日常需求,需要转形到微服务架构。也有些公司追求新的技术想去对已有系统进行改造升级成微服务。本文主要结合自身实践情况,介绍下搭建企业内部微服务平台会遇到的一些问题,使用了什么组件,快速了解微服务整体运行的机制,希望起到一个宏观指南作用。
2 整体架构图
要搭建一套微服环境需要用到很多零散的组件,每个组件负责解决某一个方面的问题,把这些点合理的组织到一起才能做出一个完整架构。对于刚接触的人来说很可能一不小心就会淹没在了微服务的海洋里,能否成功上岸心里需要有张地图,知道自己在哪要到哪里去。下图为以我公司技术架构为背景抽取了一个比较精简的技术架构图,希望达到纲举目张的效果。
3 程序版本控制
对于任何企业都会有对程序版本控制的需求,常见的版本控制工具有SVN和Git,选择上还是推荐Git。搭建Git代码私仓不用纠结直接选GitLab。
代码仓库:GitLab
GitLab与GitHub功能几乎完全一样,所以熟悉GitHub的同学可以无缝上手。Gitlab具备角色、权限划分,CI/CD等功能,在企业中可以很好的对项目、开发人员进行管控。
包管理:Nexus
提供Nuget和Maven私仓环境,满足企业内部对各项目代码包引用的管理。
4.服务配置、注册和发现
我们先假设已经完成了从单体到微服的程序拆分工作,从原来的1个单体程序拆分成了N个子服务。当把众多微服务部署后到服务器后,此时会产生几个问题:
- 每个应用程序都离不开各自的配置文件,如何能统一的对配置文件进行管理?
- 大批量部署完毕后一共发布了多少服务,它们是否正常的运行?
- 服务间互相调用时,怎样能让程序准确知道需要服务的地址?
- 如果某个服务崩溃,处理好后重新上线,在这个期间其他服务如何得知此情况?
服务配置:Nacos
Nacos是阿里旗下服务的注册发现和动态配置管理组件。我公司只用到了Nacos动态配置这块功能,统一管理各应用的配置文件,可以在线动态不停机更新配置。
服务注册与发现:Consul
负责服务的注册和发现,同时对所有服务的健康状态进行监控,做到服务上线、下线全程跟踪。
5.网关
网关的作用就是给众多微服提供一个统一的入库,前端程序在访问后端接口时无须准确知道后端服务发布的地址,只要能按一定的规则访问到网关,网关就会负责正确的把请求转发到后端服务。
- .NetCore平台网关:Ocelot
在.NetCoe平台中选用了使用最多的Ocelot网关,它能与Consul无缝配合使用。
- Java平台网关:SpringCloud Gateway
6 容器化
当服务增多后看似简单的部署,成了一个新问题。没有容器化的时候,需要在每个环境安装应用所需的运行环境,如果漏装或版本不兼容,就会导致发布上去的程序出现问题。容器化则为解决此问题而生,利用虚拟机原理实现一次构建,到处运行。
- 应用容器引擎:Docker
Docker负责把程序打包成镜像,并推送到镜像仓库中。
- 镜像仓库:Harbor
搭建私用镜像仓库,负责管理各项目镜像的管理。K8S会到此处拉取镜像生成Pod。
7.容器编排
K8s
当应用程序都容器化后,再次出现了一个新问题,如何去管理众多容器?某个应用需要在哪台服务器上部署几个容器,像这样的问题如果量小靠人肉还可以解决,如果是成百上千的服务是靠人力绝对是无法解决的。 此时谷歌推出的kubernetes (简称K8s)就是去解决了如何在集群中合理的对容器进行编排的问题。K8s可以动态分配容器到哪个节点进行部署,同时动态监控容器运行状态,当某个服务崩溃可以快速的创建出一个新的服务,当服务访问流量激增,还可以通过动态扩缩容来提供更可靠的支撑。
K8s管理工具 KubeSphere
K8s的功能非常强大,当然使用起来会有一定的门槛,特别对操作不熟练的人来说更是问题,KubeSphere则是为K8s提供一个图形化界面管理工具,方便运维人员管理K8s,对于初学者也是一个良好的学习工具。
结尾
通过以上快速的浏览可以看出,从单体转向微服务需要增多很多的技术栈,每个技术栈都是去解决微服务后衍生出来的问题,所以如在单体应用可以满足业务需求的情况下没必要向微服务转型。硬去尝试转型会带来很多技术上的风险,如果团队技术能力还不足以支撑,会陷入问题沼泽。
当然如果决定要转微服务,也不用怕,做好充分的准备工作,市面上有很多成熟的应用组件,只要正确的进行组合应用就可以搭建出一套属于自己的微服架构。以上每个节点都需要展开学习研究,每个节点都多种方案,选择适合自己的就是最好的。还有很多点没有提到比如DevOps、服务治理、日志收集、监控报警等等,以后有机会会分别展开讨论。
阅读最新文章,关注公众号:通往全栈之路