DZone>Web Dev Zone>目的驱动的微服务规划
目的驱动的微服务规划
创立目的驱动的微服务应该始终是一个方针。了解Render Blueprints怎么供给可重复的微服务战略。
作者
约翰-维斯特
CORE –
22年6月30日 – Web Dev Zone -教程
喜爱 (2)
谈论
保存
鸣叫
34.21K浏览次数
加入DZone社区,获得完整的会员体验。
免费加入
在我开端职业生涯的时分,流行语并不是我所等待的东西。在那些日子里,大部分的技术新闻都是在纸质的周刊上发布的,比方《信息周刊》和《网络世界》。我记得我在想,”店员,他们每周都在重复运用这些相同的词”。
这就意味着人们一向在运用流行语……。那时,我最喜爱的两个流行语是把互联网称为 “万维网 “和 “信息高速路”。我一向在想,是否在某个时分会有一条超级大高速公路。
但是,最近,我注意到流行语被用作不完全有意义的地方的占位符。像微服务、事件驱动架构、人工智能和ML这样的术语被用在一些场合,这让我得出结论,许多人并不完全了解这些术语。我也没有想到会这样……
幻想一下与一个被误解的问题有关的这个简略对话。
**1号人物:**你的航班什么时分起飞?
**2号人:**本年晚些时分。
尽管2号人物供给了一个并不过错的答案,但这个回答对1号人物的询问并没有真实发生任何价值。
按照相同的思路,在寻求向微服务搬迁的进程中也阅历了类似的挑战。我常常与客户和公司合作,他们的 “微服务 “规划导致了单一的单体服务。基本上,一个单体运用被替换成了一个真实大的RESTful API。
在本出版物中,我认为经过一个创立目的驱动的微服务规划的比如会很有趣……正确的办法。
目的驱动的微服务规划
目的驱动的微服务是一个能够独立存在的服务,它能够在需求时包含一个专门的持久性存储。经过目的驱动,微服务将供给一套会集的信息,并成为相关API中办理的数据的记录体系。
经过选用目的驱动的微服务办法,用户能够添加额定的节点和缩小现有的节点,以满意该时刻点的API的需求。
举例来说,一个专心于所得税某一方面的目的驱动的微服务或许会在一年的上半年看到最高的运用率,而在下半年则需求较少的实例运转。
让咱们经过一个非常简略的比如来重视目的驱动型微服务规划的创立。
创立一个基于Docker的微服务
我国的性别猜测器是一个网格体系,用于猜测婴儿出世时的性别。这是经过供给受孕月份和母亲受孕时的当时年纪来完成的。
据风闻,清朝皇室也是依托这种网格来挑选儿子的性别,因为他们能够为家庭供给作业和金钱,也能够承继宗族的血缘,所以受到喜爱。
下面是我国性别猜测网的插图。
举例来说,一个18岁的母亲在1月怀上孩子,会生出一个女婴。
对于这个出版物,咱们将创立一个目的驱动的微服务,依据相同的标准回来性别猜测。上述比如的成果有效载荷将如下所示。
JSON
{
"month": 1,
"age": 18,
"gender": "female",
"errorMessage": null
}
该微服务将运用Java和Spring Boot,并将选用一个多阶段的Dockerfile来编译该服务,并树立一个能够承载出世猜测器API的Docker镜像。
该服务的代码能够在GitLab上找到,地址如下。
gitlab.com/johnjvester…
运用Render Blueprints创立可仿制的模式
我在以下出版物中写过关于Render渠道的文章。
-
初次运用Render和Go
-
引擎盖下:Render统一云
对于我在Render上运转的个人实例,我运用了Go编程语言、静态网站和一个Postgres实例。这一次,我用Java/Spring Boot编写服务。尽管对Java的本地支撑还不存在,但Render渠道确实包含对任安在Docker容器中运转的东西的支撑。
因为出世猜测器服务包含一个多阶段的Docker文件,我想看看在Render渠道上布置一个基于Docker的服务有多简单。但是,我注意到蓝图(Blueprint)标准,也想看看它是怎么运作的。
什么是 “蓝图”?
蓝图是Render对基础设施即代码(IaC)的完成。IaC也是我将其归入一个更大的概念,称为 “*为代码”。需求办理几个服务的布置,或许有需求许多选项的服务的组织,能够在render.yaml文件中把他们的Render基础设施(服务、数据库和环境组)界说为代码。
运用Render Blueprint
在这儿供给的蓝图比如的基础上,我能够为我的经过Docker容器运转的Spring Boot服务快速创立一个蓝图。
烘托蓝图(YAML)
services:
- type: web
name: restful-api-spring-boot
env: docker
region: ohio # optional (defaults to oregon)
plan: free # optional (defaults to starter)
branch: master # optional (uses repo default)
numInstances: 1 # optional (defaults to 1)
healthCheckPath: /actuator/health
envVars:
- key: SERVER_PORT
value: 443
在这儿,我为出世猜测器服务定制了YAML数据,以更新称号属性并添加repo属性,如下所述。
YAML
services:
- type: web
name: birth-predictor
env: docker
repo: https://gitlab.com/johnjvester/birth-predictor
region: ohio # optional (defaults to oregon)
plan: free # optional (defaults to starter)
branch: master # optional (uses repo default)
numInstances: 1 # optional (defaults to 1)
healthCheckPath: /actuator/health
envVars:
- key: SERVER_PORT
value: 443
这些信息被保存在birth-predictor
库房的根部,在一个名为render.yaml
的文件中。在提交和兼并这一改变后,该服务已预备好在Render渠道上布置。
在Render仪表板上,我挑选了 “新建|蓝图“选项。
接下来,我挑选了birth-predictor
库房,用这儿的阐明将其衔接到我的GitLab账户。
因为我运用的是蓝图,我所要做的就是为我的新服务供给一个服务组称号。
按下 “运用“按钮后,布置进程开端了。
几分钟后,该服务被布置,没有任何问题。
运转中的出世猜测器
跟着出世猜测器服务的运转,我能够宣布以下cURL命令来获得新的猜测成果。
壳牌
curl --location --request POST 'https://birth-predictor.onrender.com/predict' \
--header 'Content-Type: application/json' \
--data-raw '{
"conceptionMonth" : 11,
"conceptionAge" : 43
}'
由此发生的响应有效载荷看起来像这样。
JSON
{
"month": 11,
"age": 43,
"gender": "male",
"errorMessage": null
}
这些信息刚好与咱们的儿子(Finny)受孕时的受孕月份和我妻子的年纪相符。2017年8月,他来到了!
就像他们在清朝时相同,咱们能够依托我国的性别猜测器成功地猜测出咱们孩子的性别。
结论
自2021年以来,我一向在尽力遵从以下使命宣言,我觉得它能够适用于任何IT专业人士。
“把你的时刻会集在供给特性/功能上,以扩展你的知识产权的价值。充分运用结构、产品和服务来处理其他工作。
– J. Vester
Render公司的蓝图标准坚持了我的使命宣言,允许功能和服务团队专心于按照既定的方针和指标进行交付,而不用忧虑任何与DevOps有关的工作。
一旦服务、组件或运用程序预备好了,团队只需求在他们的资源库的根中包含render.yaml文件,然后运用蓝图选项在Render渠道上创立一个新的服务。今后,任何对衔接库房的更新都会在提交代码到指定分支后几分钟主动布置。
Render渠道以 “零开发 “的心态生存,这在 “蓝图 “概念的来源中是很明显的。功能和服务开发者期望–并且应该–专心于供给更新和功能,为他们的利益相关者供给最大的价值。Render真实了解这一实际。
我坚信,流行语将永远是技术领域的一部分。但是,了解和选用这些流行语背后的真实目的,是我期望技术专家能够追求的。
假如你对本出版物的源代码感兴趣,你能够在GitLab上找到它,地址如下。
gitlab.com/johnjvester…
祝你有一个非常棒的一天!
规划 微服务
DZone撰稿人所表达的观念属于他们自己。
DZone上的热门话题
- 用API网关保护你的Web运用
- 物联网中的传感器和执行器类型
- 掌握Spring和Java EE中的Vaadin的入门办法
- 软件办法论–瀑布式 VS 敏捷式 VS DevOps
谈论