微服务部署

自己动手,丰衣足食。看上去很琐碎繁杂,其实动手部署一次就好。

现在计算机软件开发,发展出新花样。其中有前后端分离,和微服务。其实这2样东东,对软件产品本身并没有什么帮助,软件产品中应用了这些架构,并不会比没有应用它们的产品更优秀。甚至,还会有一些反作用。

比如,前后端分离,数据只能通过请求获取,服务器处理并直接输出这种模式就没有了(websocket除外)。异步操作在数据量大的情况下体验比较好,如果只有一丁点数据,其实直接输出效果更佳。与前后端分离相伴生的单页面应用,加大了编码的复杂性,需要考虑以往WEB开发根本不存在的组件区隔性,数据的重置等问题。

又比如微服务,有些人认为微服务会提高性能。其实,微服务与性能提升并没有什么必然联系。微服务的作用,是将一个复杂问题,分解为若干个相对简单的小问题,而总体功能不变。然后每个服务,独立开发,独立部署,独立配置,可以应用不同的技术栈。这其中,可能有助于功能复用,业务划分。当然啦,微服务是分布式部署,有些关键性服务单独部署在很强的服务器上,的确会有助于提升部分性能。但是,微服务间通过各种管理、转发、 络连接,又抵消了部分性能。而且部署起来,比之前要复杂得多。这种工作方式,甚至会使得开发人员不知道如何部署,于是美其名曰,不用关心如何部署。专业的事情由专业的人来做,我们有自动化部署脚本,打包,上传,部署,一键搞定,巴拉巴拉巴拉。。。

但这种模式,需要一个24小时待命的全职运维人员。如果只是某个程序员兼职,想部署、更新就麻烦。如果该程序员本身很忙,就更麻烦。

更麻烦的是,部署上去以后发现有问题。哪个环节出了问题调试是程序员一个人的事情,现在要多方沟通(其实往往是多方扯皮)。考究沟通能力。没错,沟通也是程序员基本功之一:

为啥我这个服务好像没有更新到r> 不可能!只要你提交了代码就会更新到,没提交就不会更新咯。
为啥我这个服务在本地开发没有问题,但部署上去以后就不行r> 哦,开发环境跟docker容器不一样。you know,docker本身也是一个环境。

怪不得,要强调DevOps,大家要通力合作,精诚团结。

总的来说,采用微服务与前后端分离打造出来的产品,并不比原先的产品更好,而是由于它们将一个产品分拆成了独立块,每一块都可以独立开发,独立部署,独立配置,使用不同技术栈,能够并行开发,提高了开发效率。提升的不是产品,是产品的打造速度。但是,这个速度是以增加技术复杂性,加大人员投入来换取的。

话说,我这段时间参加的项目,就是跑在微服务架构上的。使用的技术栈,工具,整理了一下,如下:

1、spring cloud,开发框架
2、nacos,微服务管理框架
3、docker,微服务容器
4、统信uos,生产环境操作系统

这里面,最复杂的应该是spring cloud,但最令我感到新奇的是nacos。

nacos,用于管理微服务。包括注册,监管,消息转发,等等。消息转发是指,比如前端请求转发到相关微服务;微服务之间相互调用之类。就是它接管了微服务。可能与之类似的是K8吧。每个微服务的配置里面,都指向这个nacos,所以启动的时候,会到nacos注册。

假如我现在要部署一个服务到docker,该怎么处理呢p>

1、相关代码
发布服务的时候,需要指向nacos地址,nacos的命名空间。命名空间管理各种配置。之前将配置写在配置文件,配置文件刚开始时是XML,后来嫌烦,开始约定重于配置,简化配置文件。现在又将配置变成了外挂。更改配置,只需在nacos提供的WEB页面上进行,越来越方便了。

假设有一个采用微服务框架的程序,A服务是其中一个微服务。

1)微服务框架的的 /pom.xml
里面定义了开发环境,生产环境。每个环境都指向了各自的nacos,以及一些配置。例如开发环境,

2)微服务A的配置文件bootstrap.yml

2、发布程序jar包

其中sb-dev是环境名称,发布项目sb-server。

微服务部署
-pl –projects Build specified reactor projects instead of all projects
选项后可跟随{groupId}:{artifactId}或者所选模块的相对路径(多个模块以逗 分隔)

-am –also-make If project list is specified, also build projects required by the list
表示同时处理选定模块所依赖的模块

-amd –also-make-dependents If project list is specified, also build projects that depend on projects on the list
表示同时处理依赖选定模块的模块

-N –Non-recursive Build projects without recursive
表示不递归子模块

-rf –resume-from Resume reactor from specified project
表示从指定模块开始继续处理

3、部署到docker
运行一段脚本,将jar部署进docker

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树服务 格(istio)ServiceMesh介绍8746 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月16日
下一篇 2021年11月16日

相关推荐