企业内PAAS建设的经验与教训
本人七年研发经验,当前就职于普通中型互联网公司,主要负责企业内部分PAAS的开发建设,经历过企业统一配置中心、统一名字服务、基于Sentinel的高可用流量防护系统、基于CoreDNS的内网DNS、基于K8s的发布平台部分设计开发工作。
一、为什么要建设企业内的PAAS
试想,当你进行一个项目的研发,你要部署代码仓库、搭建环境、搭建数据库、搭建Redis、搭建MQ等系统,那你的团队沟通成本得有多大,需要协调开发、运维各种环境与权限,一切协调好了,可能一个多月过去了才能进入正常的开发节奏。当你的团队使用开源中间件时,开源中间件的一些升级、维护问题谁来解决呢。等等情况,如果你是资深开发的话,在此之上可能还有更多的场景可以我们一起交流。
有位老师曾说过,PAAS作为企业内部研发与运维的中间层存在,它的存在对于提升研发运维效率有着非常可观的提升。对于研发RD来说PAAS平台屏蔽了基础设施与网络运营的细节,它开通即用,申请即可获得数据库、缓存、MQ等中间件的支持。对于运维SRE来说,减少了和众多研发沟通的成本,只需要和一小撮PAAS平台的研发进行合作,默契培养起来会更容易。
二、建设企业内的PAAS会遇到哪些困难
1.什么时候开始启动PAAS建设
一般来讲,当企业出现一个较大的业务体系,并在此业务体系上发展了很多周边业务,此时依托于大的业务部门就应当开始启动企业内PAAS的建设。比如配置中心、名字服务、K8s发布系统等PAAS。
2.如何设计企业PAAS,以配置中心为例
1.PAAS内核选型
如搭建配置中心PAAS,我们首先要对PAAS内核进行选型,候选内核:Nacos、Apollo、Etcd、Consul、自研等。个人认为选型的特性从最重要为例:公司内部接受性 > 开源社区活跃度 > 接入方式 > 二次开发难度 > 性能 > 功能。具体的选型过程非本文重点,假设经过对比我们选择了Nacos这一开源中间件。
2.PASS的控制台(控制面板)
配置中心的控制太选型比较简单,一是复用开源控制台,如Nacos自带控制台;二是自研控制台。这个视团队前端资源充足性来看。
3.PASS的功能设计
1.对于PAAS来讲首先要实现多租户功能,用于隔离各个业务线,以个人经验来讲,三层结构比较合理,如“事业部-部门-团队”组成业务线概念。
2.对于PAAS来讲,其次要实现用户管理与用户权限,用于日常开发与管理。
3.PAAS核心功能,如配置中心与代码是强相关的PAAS,即我们最关心的是配置分环境管理、双人审核上线、配置下发监控等等等。
4.PAAS的接入方式与鉴权,通常来说要提供2种主流语言的适配,如JavaSDK、GoSDK。以及OpenAPI的访问方式、和一种无侵入的接入方式,如配置中心可以依赖于Confd实现、名字服务可通过CoreDNS来做动态服务发现。
5.PAAS服务的运行可见性,众所周知,可见性主要是日志、指标和链路。
4.PAAS的开发实现
1.如果使用开源软件内核,开发团队需要对核心代码掌控度达到50%-60%的程度。同时二次开发,尽量通过插件式或者利用各种代码无侵入的技术集成到开源代码中,以便之后内核升级。
2.相对来讲,内部PAAS的前端资源比较紧缺,此时功能实现应尽量采取直观简单的实现方式。
3.容量规划,例如基于Nacos配置中心着重看集群托管配置文件的数量、监听配置中心的长连接数量。超出容量必须有最快的解决方案与长期的解决方案。如配置中心短期的解决方案是提供多个集群入口,长期的解决方案是屏蔽多个集群入口,使用Proxy解决流量分发到各个集群的方案。
4.部署方式,物理机部署还是K8s部署,支持多机房部署等。
5.SLA承诺,根据PAAS的类别定义相应的SLO与SLI,进行压测后或者长期运行观察定期调整SLA承诺。谨记PAAS稳字当头。
5.PAAS的运营
1.运营首先我们需要提供各环境的控制台入口、接入方式、接入文档。并从上线开始,不断优化我们的控制台体验与文档。
2.用户的个性化需求如何解决?这个其实并没有万能公式,视情况随机应对,个性化需求尽量放一放或进行问卷调查决定是否支持。
三、我心目中的PAAS平台是什么样的
每个研发都有独属于自己的设计与思考,当前因为各种原因无法实现,但那是心中的一片乌托邦。
1.PAAS到底是为谁服务的
讲到这里,其实可能很多人说所有系统都是为人服务的,其实没有错,毕竟人要用。但是从我的角度出发,PAAS是为一个个运行的“服务”去服务的,每个PASS平台都是,例如代码平台是服务代码托管、发布平台是服务运行时环境托管、配置中心是服务配置的托管、名字服务是服务地址的托管、MQ是服务队列的托管。
2.基于服务为核心打造PAAS的好处
铁打的营盘,流水的兵。人会跨企业流动,服务基本不会跨企业流动。所以当一个开发获得一个服务的权限时候,是否应当获得该服务的具体信息、代码权限、配置中心、名字服务、告警中心、日志中心、MQ、数据库、缓存等。那一个离职的时候是否应该剥夺所有的权限。如此一来,研发效能是否能提高很多呢。