微服务容器化时应该注意哪些坑

运维就要无所不能,无所不会

[TOC]

大家好,我是史丹利「stanley」,今天來聊聊微服务做容器化时应该规避哪些坑。

在上上篇文章里,我们有提到容器化时成本控制。

运维职业的第一职业敏感是成本。这毫无异议。

曾经有架构师推荐老板容器化的一个理由也是容器化可以大范围节约公司资金成本,我也一度很认可,但后来发现凡事是有前提的

微服务天生适合容器化,这也毫无异议,但也是有前提的,前提就是做了合理的微服务拆分

太过粗糙的微服务拆分,顶多影响开发工作版本迭代,提升版控难度,但过于细分的微服务拆分,则会增大容器化后的成本。

安全起见,Java 进程启动时都分显示声明的内存分配

-javaagent:/usr/local/skywalking_agent/skywalking-agent.jar -Dskywalking_config=/usr/local/skywalking_agent/config/app.config --eureka.client.serviceUrl.defaultZone=http://eureka.example.com/eureka/ -XX:PermSize=128m -XX:MaxPermSize=128m

k8s 也一样,官方建议对所有的pod做限额配置。

        resources:
          requests:
            cpu: 2
            memory: 2048Mi
          limits:
            cpu: 2
            memory: 2Gi

如上的方式为资源硬设置,即固定分配2c2G的资源,如果觉得这样的方式,太浪费资源,k8s 同样提供了如下比较人性人的设置,

limits:
- default:
    cpu: 800m
  defaultRequest:
    cpu: 800m
  max:
    cpu: 800m
  min:
    cpu: 200m
  type: Container

软资源限制对资源浪费有缓存,但并不能实质性解决资源浪费的情况,因为没人知道什么时间pod的资源占用会达到峰值,即使知道,这部分资源也需要一直为其预留,与其这样,反倒硬资源限制更安全。

所以,问题就回到了,如何微服务的切割原则。

一、微服务常见的坑

单体应用运行一段时间后,随着业务的增长,对系统性能和并发性要求越来越高,这个时候就面临着微服务重构的选择,但在重构前,我们必须反复权衡并且做好必要的基础设施准备以应对新架构下面临的新问题,而不是觉得微服务现在火脑袋一热就开始着手微服务重构。

结合实际项目回顾下微服务可能存在的坑,主要包含以下几点:

  • 过分强调’微‘,致使服务拆分过细,服务数量太多,导致服务间关系复杂,系统复杂度上升,人力和维护成本变高;
  • 原本的单体同进程间服务调用变成远程不同进程间服务调用,调用模式从内存调用变成网络调用,如果调用链路过长,反而会导致性能下降,响应时间变长,同时问题定位变得愈发困难;
  • 基础设施不健全,没有必要的服务监控和治理,导致服务管理混乱,原本设想的轻量级微服务变成一堆乱麻,此外,自动化测试和部署支持也要更上,否则服务间有依赖的话无法实现快速交付。

我们分几方面介绍:

  • 服务拆分前提
  • 服务拆分时机
  • 服务拆分方法
  • 服务拆分规范

二、服务拆分前提

  • 公司的CICD平台较完善

服务拆分后,同步带来的验证、测试、上线等工作量是有增无减,微服务的过程其实是人力换质量的过程 。如果配套工具不成熟,同步带来的复杂度会远胜便利性。

  • RESTFUL API 接口和前后端分离

[图片上传失败...(image-27f485-1610636671284)]

新一代开发开发框架,基本上已经有很好的前后端分离。这样的好处是,无论后端如何变化,对前端都是透明的。而且可以实现拆分过程中的灰度发布,路由分发,流量切分,从而保证拆分的平滑进行

  • 数据库表设计

各功能模块间没有大量的复杂联合查询,优秀的库表设计应该能达到绝大多数的功能查询只是 k/v 的O(n) 查询。否则,微服务的拆分会有很大难度,和代码重构无异

  • 无状态化

[图片上传失败...(image-91cb7a-1610636671284)]

新一代的开发框架和开源流行工具都在强调的功能特性,去中心化,无状态化。无状态化同样是k8s的核心思想之一。

三、服务拆分时机

新业务通常使用springcloud全家桶,在某些程度或者完全实现微服务化。

旧业务的微服务化改造的拆分并非自上而下一步到位的重构改造,通常是由痛点驱动,是业务真正遇到了快速迭代和高并发的问题,如果不拆分,将对于业务的发展带来影响,只有这个时候,微服务的拆分是有确定收益的,增加的运维成本才是值得的。

比如如下的情况之一:

  • 提交代码频繁冲突
  • 无法快速版本迭代,小功能要积累到大版本才能上线,每次上线各种问题,不蜕三层皮上线不成功
  • 业务有高并发需求
  • 熔断全断if-else

如上情况,可考虑服务拆分

四、服务拆分方法

[图片上传失败...(image-62efa9-1610636671284)]

[AKF扩展立方体](参考《The Art of Scalability》),是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。

  • X 轴 :指的是水平复制,很好理解,就是讲单体系统多运行几个实例,做个集群加负载均衡的模式。

  • Z 轴 :是基于类似的数据分区,比如一个互联网打车应用突然或了,用户量激增,集群模式撑不住了,那就按照用户请求的地区进行数据分区,北京、上海、四川等多建几个集群。

Y 轴 :就是我们所说的微服务的拆分模式,就是基于不同的业务拆分。

场景说明:比如京东商城,一个集群撑不住时,分了多个集群,后来用户激增还是不够用,经过分析发现是6.18访问量很大,就将商城页面流量大功能再做拆分,每个拆分出来的功能,独立维护,各自都可以再次按需扩展。

反面教材:

我们公司的内部应用系统,使用人数不超过100人,但系统却拆分成30多个模块,造成容器化时大量资源浪费。

五、服务拆分规范

服务拆分规范并不是运维强项,或者运维并没有太多的机会和话语权参与到开发的实际开发工作中。

在实际工作中,微服务对运维工作造成比较大的影响,比如工作量陡增,资源成本消耗更多,但服务质量并没有实际提升,那么优先考虑

  • 运维工具是否成熟健全
  • CICD流程是否成熟可靠

如果均没有,再考虑微服务拆分问题,这里仅做入门,建议深入学习后再和开发同学一起改进优化。

  • 服务拆分的规范一:服务拆分最多三层,两次调用
  • 服务拆分的规范二:仅仅单向调用,严禁循环调用
  • 服务拆分的规范三:将串行调用改为并行调用,或者异步化
  • 服务拆分的规范四:接口应该实现幂等
  • 服务拆分的规范五:接口数据定义严禁内嵌,透传
  • 服务拆分的规范六:规范化工程名

微服务规范参考: http://dockone.io/article/8241

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容