背景
代码无侵入、业务无感知引入。业务无需对程序代码任何修改,配合发布系统(托管Agent 参数)实现一键使用。
多版本兼容。同时适配不同版本框架的应用。
微服务治理全家桶(Spring Cloud/Sentinel/Nacos/OpenTelemetry)。业务无需感知框架、版本等细节,获得SDK同等的微服务治理 All-In-One 能力。
接管主流注册中心(Nacos/Kubernetes)。打通服务注册中心,注册与发现全托管。
兼容全系 Java 应用。基础框架无限制,多JDK版本兼容。
模块化设计,可按需热插拔、升级。业务可按需加载、卸载功能模块,组件灵活演进、升级。
云原生方案的发布体系加持。实现无感的发布体验。
挑战项 | 容量规划 | 当前方案容量 |
采样 | 100% | 50% |
POD数 | 万级 | 千级 |
容量 | 千亿级 | 百亿级 |
吞吐量 | 百亿级 | 十亿级 |
架构融合的调整是现阶段需要解决的挑战,但架构融合始终无法解决能力上的融合,但能给能力上的融合提供一道上升的台阶,这也是下一步我们重点规划的方向。如何突破数据孤岛建设可融合的能力平台依旧存在新的调整,特别在进一步演进AIOps过程中问题依次会被提出。
在分布式系统中,应用通常包含业务逻辑、非功能性需求(NFR)和中间件依赖(三方依赖)。
业务逻辑
中间件依赖(三方依赖)
非功能性需求(NFR)
OpenTelemetry 是由一组 API 和库构成的标准,由 OpenTracing 和 OpenCensus 项目的合并而来,服务于可观测技术的底层数据采集,最早由微软和 Google 发起,当下已经成为美国可观测行业研发的事实标准 —— 微软、Google、Datadog、Splunk 等企业全部采用 OpenTelemetry 完成底层的数据采集,而 OpenTelemetry 的主要贡献者也来自这些公司。
维度
Traces
Metrics
Logs
Events(包含在OpenTelemetry定义中)
前端
WAF
Ingress
微服务应用
Java
Go
Python
稳定治理体系
云原生为众安提供了一套指导思想,在既有的容器化的基数设施和DevOps体系建设上,延伸出更加符合当前现状且可大规模实施的微服务架构和治理体系。在体系建设方面众安采用核心能力拥抱开源,针对不同场景提供了基于云原生的Ingress和Nacos的东西流量服务注册发现,在该架构体系上提供应用外的服务注册发现、熔断限流、安全校验、灰度发布、多级容灾,保障线上不掉流量。意味着需要将Nacos Discovery、Sentinel、RPC(Feign、Rest)调用的深度治理能力融入Agent体系,基于团队对Sandbox理解和阿里技术栈集成经验,采用了SandboxAgent作为Agent基座托管。
大规模集群支撑能力
动态配置下发
秒级的响应
实时监控上报与告警
在构建基础可观测及防护能力上,极大提升了微服务应用的稳定性及存活能力,但基于标准且固定形态形成的基础能力难以覆盖运行时相对复杂场景的观测及诊断需求,服务生命周期中运行时覆盖了技术上的启动、运行、下线,也包括业务的功能上线、迭代、放量、新业务新流量的冲击,每一次事件变更都可能会成为一次新的故障根因,在此基础上,需要构建更具灵活性的事前事中治理能力。
「事中」应用洞察:基于应用诊断能力的动态的调试型信息采集,参考类似于去哪儿bistoury。
「事前」攻防联合:在一系列可预知的行为场景自动化、随机化,演练观测防护的响应机制。
架构设计
在架构设计上,OneAgent的探针身份贯穿了整个数据面,并跟随POD能力进行弹性伸缩,大规模的系统设计中,复杂度从探针侧转移到了后端服务收集器侧和分析侧上,吞吐量和算力决定了流量和告警响应的实时性,架构升级上我们也从早期的Flink+ElasticSearch架构切换到目前的Flink+Clickhouse组合。
精准治理离不开数据的完整性要求,更离不开控制面对于治理粒度的精确支持,同时治理粒度过细又提高了应用的管理成本,分级治理是平衡能力与成本的一种较好的方式,同时对于应用接入和治理提供了一个可递进的能力。特别是在大规模实施场景下,应用的迭代、变更都将对管理成本提出新的挑战。
全局:对应基准的能力配置,可覆盖至全部应用;
组:对应场景实践的分组治理,比如核心链路、强弱依赖划分;
应用:针对服务本身的配置,优先级高于组和全局;
发布单组:对某一次发布的应用标签,可覆盖多个应用。
Agent-Point
Sentinel2Metrics
JMX2Metrics
OpenTelemetry2Metrics
Flink-Point
Span2Metrics
Log2Metrics
DB-Point
ClickhouseMV2Metrics
实践
对于大型的自研或开源系统定制落地,系统的大规模推广非常考验团队对于工程流程的制定和遵循,特别是作为统一的基础能力项目被集成在全司的服务之上。在实践上我们提出了可达成实施的协作机制,主要围绕2个时态2个关键点。
开发态
版本
流程
版本 & 流程
基础设施
在基础设施侧,可以通过常规的服务编排方案,也可以通过DeamonSet进程拦截注入方案。
正式版本
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
creator: ""
labels:
app: xxxx
app_id: "7376"
appversion: 1ceb71ff-xxx-t55cj
base_name: xxx
flow_id: 62100d54fd34
initcontainerset.kubecloud.io/sky-one-agent: ""
prime_department_id: "xxx"
project_id: "2365"
publish_version: v1-xx
kind: Deployment
metadata:
annotations:
creator: ""
labels:
app: xxxx
app_id: "7376"
appversion: 1ceb71ff-xxx-t55cj
base_name: xxx
flow_id: 62100d54fd34
initcontainerset.kubecloud.io/sky-one-agent-experiment: ""
initcontainerset.kubecloud.io/sky-opentelemtry-agent-experiment: ""
prime_department_id: "xxx"
project_id: "2365"
publish_version: v1-xx
架构升级要回答能力、效率、成本多重问题。经过半年的实践,在过程中回答了路径设计的正确性,在数据上回答了目标设计准确性。未来,降本增效进一步迈向深水区,找技术要红利的门槛越来越高。
在云原生的基础加持下,OneAgent将大规模Java微服务的非功能性能力下沉,符合目前阶段的架构预期,但接下来依然要回答一系列的后续问题。
摘自
① ②基建规模《一年 100% 云原生化,众安保险架构演进的探索与实践》
众安的基建规模,众安这边的主机规模,按照 4C8G 这种机器的规格去计算的话大概是在一万加以上,应用规模是一千多个,技术人员的规模大概是在两千以上。众安技术架构在转向云原生之后,结合资源弹性编排带来的成本节省,以及 DevOps 体系建设和落地,有效提升了需求交付率,缩短了交付周期。从统计的数字上来看,21 年众安发布次数在 12 万次以上,相交于云原生之前增长了 22 倍,关于转向云原生,众安还是获得了非常明显的收益。
③CSDN《2022中国开发者调查报告》
参考https://www.infoq.cn/article/KNp1ibj40vS8IIZCizMW