![](https://img.kancloud.cn/86/bb/86bb236d3bd6be9bc05372ac3df0b4f0_2557x2776.png)## 微服务平台架构设计
![](https://img.kancloud.cn/6b/1e/6b1e70b4780014f40f45e7027a9b0b42_1155x704.png)
## 云原生应用开发和部署的四大原则
云原生应用所构建和运行的应用,旨在充分利用基于四大原则的云计算模型。
![](https://img.kancloud.cn/19/76/1976e15e9bb5389fc089093dfd7536aa_745x439.webp)
云原生应用开发所构建和运行的应用,旨在充分利用基于四大原则的云计算模型:
* 基于服务的架构:基于服务的架构(如微服务)提倡构建松散耦合的模块化服务。采用基于服务的松散耦合设计,可帮助企业提高应用创建速度,降低复杂性。
* 基于API 的通信:即通过轻量级 API 来进行服务之间的相互调用。通过API驱动的方式,企业可以通过所提供的API 在内部和外部创建新的业务功能,极大提升了业务的灵活性。此外,采用基于API 的设计,在调用服务时可避免因直接链接、共享内存模型或直接读取数据存储而带来的风险。
* 基于容器的基础架构:云原生应用依靠容器来构建跨技术环境的通用运行模型,并在不同的环境和基础架构(包括公有云、私有云和混合云)间实现真正的应用可移植性。此外,容器平台有助于实现云原生应用的弹性扩展。
* 基于DevOps流程:采用云原生方案时,企业会使用敏捷的方法、依据持续交付和DevOps 原则来开发应用。这些方法和原则要求开发、质量保证、安全、IT运维团队以及交付过程中所涉及的其他团队以协作方式构建和交付应用。
# 应用层微服务改造注意事项
- 应用框架推荐使用
- 微服务框架:spring boot、service mesh (istio)
- 东西流量使用HTTP
- 提供应用的健康检查API:/api/v1/checkhealth
- 服务发现方法
- 推荐使用 k8s 原生service 网络
- 不推荐使用 spring cloud Euraka
- 应用配置管理
- 建议使用配置中心Nacos
- 不建议使用本地文件profile
- 应用无状态,支持横向扩容
![](https://img.kancloud.cn/d3/ce/d3ce11f7ffdd0d8a7675726c668506ba_1439x799.png)
## 基础服务平台设计
![云原生架构图](http://assets.processon.com/chart_image/613eaf285653bb1f32573574.png?_=1636420825030)
![云平台基础架构图](http://assets.processon.com/chart_image/61e785d2e0b34d06c3056c9b.png?_=1644564205348)
- Jenkins【持续集成】
- Prometheus【监控系统】
- ELK 【日志分析系统】
- Jumpserver【堡垒机】
- Nexus 【制品仓库】
- SWR 【容器镜像仓库】
- LDAP 【统一身份认证】
- DNS 【私有DNS】
- APM 【应用性能分析】
- Ansible 【基础服务管理】
## jenkins CI/CD 流程
### 视频演示
- Jenkins 用户权限管理
- 支持RBAC 角色权限管理
- 授权开发者管理只属于自己任务job:查看、发布、重构
- 构建任务区分应用环境:Dev、Sit、Uat、Prd
- Jenkins pipeline 全流程自动化发布
- ansible 自动化发布ingress 资源
### Jenkins CI/CD 流程
![](http://assets.processon.com/chart_image/5b84ad40e4b0d4d65be96283.png?_=1597140984103)
1. pull代码
2. 测试registry,并登陆registry.
3. 编写应用 Dockerfile
* dockerfile 对应用代码无侵入,可以实时修改。
4. 构建打包 Docker 镜像
5. 推送 Docker 镜像到仓库
6. 持续发布至容器集群
* 支持自动化自定义渲染多种K8S 资源类型:deployment、statefulset、pvc、configmap
* 持续发布支持常见集成工具:helm、kustomize、argocd
* 应用发布支持多环境部署:区分namespace、集群、权限审核
* 支持微服务应用一件发布
7. Deployment 部署模板设计
* 镜像ID:使用8位Commit ID
* 启动探针:存活探针、启动探针、业务探针
* 应用cpu mem资源限制:limit、request
8. 检查应用状态
[JenkinsCI/CD实践参考文档](https://www.kancloud.cn/huyipow/jenkins/748973)
### 应用资源分配规则
cat ftc_demo_limitRange.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: ftc-demo-limit
namespace: ftc-demo
spec:
limits:
- max : # 在一个pod 中最高使用资源
cpu: "2"
memory: "6Gi"
min: # 在一个pod中最低使用资源
cpu: "100m"
memory: "2Gi"
type: Pod
- default: # 启动一个Container 默认资源规则
cpu: "1"
memory: "4Gi"
defaultRequest:
cpu: "200m"
memory: "2Gi"
max: #匹配用户手动指定Limits 规则
cpu: "1"
memory: "4Gi"
min:
cpu: "100m"
memory: "256Mi"
type: Container
限制规则说明
* CPU 资源可以超限使用,内存不能超限使用。
* Container 资源限制总量必须 <= Pod 资源限制总和
* 在一个pod 中最高使用2 核6G 内存
* 在一个pod中最低使用100m核 2G 内存
* 默认启动一个Container服务 强分配cpu 200m,内存2G。Container 最高使用 1 cpu 4G 内存。
* 如果用户私有指定limits 规则。最高使用1 CPU 4G内存,最低使用 cpu 100m 内存 256Mi
默认创建一个pod 效果如下
kubectl describe pod -l app=ftc-saas-service -n ftc-demo
Controlled By: ReplicaSet/ftc-saas-service-7f998899c5
Containers:
ftc-saas-service:
Container ID: docker://9f3f1a56e36e1955e6606971e43ee138adab1e2429acc4279d353dcae40e3052
Image: dl-harbor.dianrong.com/ftc/ftc-saas-service:6058a7fbc6126332a3dbb682337c0ac68abc555e
Image ID: docker-pullable://dl-harbor.dianrong.com/ftc/ftc-saas-service@sha256:a96fa52b691880e8b21fc32fff98d82156b11780c53218d22a973a4ae3d61dd7
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 21 Aug 2018 19:11:29 +0800
Ready: True
Restart Count: 0
Limits:
cpu: 1
memory: 4Gi
Requests:
cpu: 200m
memory: 2Gi
### 生产案列
apiVersion: v1
kind: LimitRange
metadata:
name: jccfc-prod-limit
namespace: jccfc-prod
spec:
limits:
- max: # pod 中所有容器,Limit值和的上限,也是整个pod资源的最大Limit
cpu: "4000m"
memory: "8192Mi"
min: # pod 中所有容器,request的资源总和不能小于min中的值
cpu: "1000m"
memory: "2048Mi"
type: Pod
- default: # 默认的资源限制
cpu: "4000m"
memory: "4096Mi"
defaultRequest: # 默认的资源需求
cpu: "2000m"
memory: "4096Mi"
maxLimitRequestRatio:
cpu: 2
memory: 2
type: Container
## 监控系统介绍
- 基础监控:是针运行服务的基础设施的监控,比如容器、虚拟机、物理机等,监控的指标主要有内存的使用率
- 运行时监控:运行时监控主要有 GC 的监控包括 GC 次数、GC 耗时,线程数量的监控等等
- 通用监控:通用监控主要包括对流量和耗时的监控,通过流量的变化趋势可以清晰的了解到服务的流量高峰以及流量的增长情况
- 错误监控:错误监控: 错误监控是服务健康状态的直观体现,主要包括请求返回的错误码,如 HTTP 的错误码 5xx、4xx,熔断、限流等等
### Prometheus Arch
![Prometheus架构图](https://prometheus.io/assets/architecture.png)
![ingress](https://img.kancloud.cn/3f/39/3f39e984c98709265f0a4a4c1f180586_2482x1181.png)
### 日志管理系统
### jumpserver 堡垒机使用说明
- admin: root管理员权限
- Developer: 开发这权限
# Devops标准化规范
![标准化意义](https://img.kancloud.cn/02/10/0210b16adfa30bad1bd72c74798eafa7_670x503.jfif)
## **目的**
为确保锦程业务访问的安全性、统一性和可管理性,制定本管理规范。
- [域名管理规范]([https://www.kancloud.cn/huyipow/devops/971142](https://www.kancloud.cn/huyipow/devops/971142))
- Deployment容器规范
- 日志标准化规范
- 编译和运行其标准
- 项目上线checklist
[标准化规范wiki连接](https://wiki.corp.jccfc.com/pages/viewpage.action?pageId=10584752)
## 域名管理规范
用途| 分类 | 域名 | 证书类型|DNS 解析范围|API服务|
----|----|----|----|----|----|
外部客户访问网站、外部合作伙伴访问API | 公网网站|jccfc.com 等业务对应域名|从互联网CA采购SSL证书,及通配符SSL证书 |互联网、内网|允许|
锦程内部用户访问网站 | 内部网站|corp.jccfc.com |等业务对应域名内部证书 客户端证书认证|互联网、内网|禁止
数据中心内部访问、API调用等设备管理用途|内部域名|jccfc.io (各业务统一使用本域名)|无|允许
|K8S集群内服务与发现|ServiceName|Appid|无|K8S集群内|允许|
### k8S service 服务请求地址
请求地址格式
http://appid.namespace.svc.cluster.local:port
夸NameSpace
http://user.jccfc-uat.svc.cluster.local:8080/Seal/
同NameSpace访问地址
http://user:8080/raWeb/CSHttpServlet
### spring cloud 接入详细方案,简单配置代码无影响
![](https://img.kancloud.cn/e7/12/e712224b9ee6129221f7ad628fc2d4ac_907x582.png)
* ① 去掉对Eureka连接
* ② SpringCloud的服务和对应Kubernetes服务的绑定
* ③禁用Eureka服务注册,服务发现,禁用Hystrix等。
* 其中①和③都是通用的禁用Springcloud的功能,只有②是必要的对要访问的服务进行适当配置。
## Deployment 容器规范
### Deployment
规范脚本在 jenkins 生成
- 应用提供健康检查API:http://cms.corp.jccfc.com/api/v1/checkHealth
- 后端应用端口:8080
- 前端应用端口:80
## EFK实时日志查询系统
### 概要:
实时收集和存储各类日志,方便快速查看、分析日志,提供可视化图表、以及基于日志内容监控告警
### 背景:
* 开发可登录服务器查看日志,存在安全隐患
* 查看日志需要专门人员授予不同权限,消耗人力和时间
* 各个项目日志格式自己拟定,维护难度大
* 日志没有滚动压缩,占用磁盘空间
* 日志缺乏分析和监控
### 日志平台架构:
![](https://img.kancloud.cn/52/82/5282f9660d152a54c105be6eefd42f01_468x151.png)
### 功能:
* 日志自动发现、采集
* 日志自动解析,生成索引
* 日志自动生命周期管理
* 冷热数据分离
* 可视化图表
* 集群性能监控
* x-pack权限控制
### 容器内应用写入路径:
/volume_logs
### 节点挂在路径
/opt/app_logs/{{ appid }}/app.log // 应用日志
/opt/app_logs/{{ appid }}/api-access.log // restful接口访问日志
/opt/app_logs/{{ appid }}/rpc-access.log // rpc接口访问日志
### 容器化应用
/volume_logs/app.log
/volume_logs/api-access.log
/volume_logs/rpc-access.log
## 编译和运行期标准
### JDK Version 推荐使用1.8.0_191
| 版本 | 参数 |说明|
| --- | --- |---|
| 1.8.0\_131 | UseCGroupMemoryLimitForHeap | 堆内存限制
|1.8.0\_191 |ActiveProcessorCount| CPU 核数限制 |
|1.8.0\_191以上| XXInitialRAMPercentage=N|将初始堆大小设置为总内存的百分比|
|1.8.0\_191以上|XX:MinRAMPercentage=N|将最小堆大小设置为总内存的百分比|
|1.8.0\_191以上|XX:MaxRAMPercentage=N|将最大堆大小设置为总内存的百分比|
> 其中N是0到100之间的值,可以是“ double”类型。例如,12.3456。
* 容器内存 Request >= 1.25 \* JVM 最大堆内存 ;
* 容器内存 Limit >= 2 \* JVM 最大堆内存;
### maven && nexus
版本| 备注
---|---
3.6.1 | 推荐版本
后端应用仓库 :https://nexus.corp.jccfc.com/repository/maven-public/
- sit: 使用snap 仓库
- uat: 使用release 仓库
- prod: 使用release 仓库
前端应用仓库地址:https://nexus.corp.jccfc.com/repository/npm_group/
## 项目上线checklist
### 目的
通过标准化部署要求,提升DevOps与开发团队部署应用效率。保障项目上线稳定性。
![DevOps](https://img.kancloud.cn/93/a1/93a1a07edc6dd1322180772cb69bf732_800x600.gif)
### 上线流程
- 架构组审核
- DevOps 对接人分配项目负责人,明确指定项目Devops、DBA 负责人
- 完成项目上线
- 添加项目监控
- 添加日志索引
### appid 作用域
- 应用名称
- git_repo
- es 索引名称
- 监控服务名称
- 访问域名
### 编写部署文档
项目开发负责人参考下图checklist要点,在项目code中编写README文档。
![应用上线](https://img.kancloud.cn/86/bb/86bb236d3bd6be9bc05372ac3df0b4f0_2557x2776.png)
### 应用架构图案例
![应用架构图案例](https://img.kancloud.cn/ed/44/ed4499689cf29bd9bd2a281a1c1f01e7_1048x765.png)
## 配置变更流程
### 作用域
- 测试环境
- 生产环境
### 审批流程
- 一般事务变更
- ansible配置项修改。
- 提交 pull request,待运维管理员审批通过
- 执行变更
![一般事务配置](http://assets.processon.com/chart_image/5d4252a6e4b0d11c89186cdb.png?_=1564627655039)
- 全局事务:
- 全局环境信息,参考以下审批流程
- ansible配置项修改
- 提交 pull request ,待运维管理员审批通过
- 邮件组成员商定变更时间
- 邮件成员:CTO、研发负责人、产品负责人 、运维负责人
- 确定变更时间后,全员邮件、微信组通知。既定时间内执行变更
![配置变更](http://assets.processon.com/chart_image/5d410d40e4b0e6d919a276b5.png?_=1564627027688)
### 应用故障评级
![](https://img.kancloud.cn/42/bf/42bfbe0cff714668c115135f87fe18fa_793x289.png)
- 云原生应用
- 容器化微服务改造方案
- 应用容器化上线规范
- 服务网格和传统应用区别
- DevOps 管理规范
- 基础架构管理规范
- 域名管理规范
- 主机名称管理规范
- 应用域名管理规范
- 应用上线规范
- GIT分支及API JAR上传规范
- 基础架构设计
- 运维管理职责
- 基础服务
- DNS 内部架构
- centos 及 kernel 版本标准
- Linux服务器OS标准配置
- Docker版本初始化
- kuberneter 集群方案
- kubernetes 命名规范
- Jenkins CI/CD
- nginx 配置文件变更流程
- Prometheus 容器监控
- 项目资源需求
- 应用服务
- 编译和运行期标准
- 新核心系统基础服务架构
- 安全防御
- 互联网软件可靠性工程及可靠性度量