快速构建和自动化构建系统架构 20250519

写在前面

本篇是关于系统架构 快速构建和自动化构建的思考, 日期是表明截止这个时间点的思考, 末尾会捎带提一下这块的尝试, 本篇更多还是总结过去与当下

微服务?

小而美不仅是微服务的状态, 也是创业开始的状态,可以简单理解2者天然就是一回事, 随后的发展就开始大相径庭

  • 业务 -> 复杂
  • 微服务架构 -> 简单

业务变复杂很好理解, 为啥微服务会变简单? 这里通过3点来说明

  • 微服务对应应用而言很简单,非业务的功能, 都在微服务的各个组件中实现了
  • 微服务的发展, 就是不断让组件更易用更好运维的过程, 过程中伴随着 云原生 不断迭代
  • 微服务的现状, 在云厂商几乎都是开箱即用的状态

回顾下微服务的组件

罗列了一些, 看到微服务相关的技术, 只需要知道处于微服务生态位的哪个地方, 以及最佳实践(通常是技术栈的组合)有哪些

  • rpc IDL: grpc thift.kitex dubbo jsonrpc.jet brpc srpc
  • ServiceRegistryDiscovery.服务注册发现
  • provider.server: rateLimit.限流.令牌桶
    • transporter > codec > monitor/cache/auth > serviceImpl
  • invoker.client: retry.重试 CircuitBreaker.熔断=fallback.降级.本地缓存=服务雪崩
    • transporter > codec > monitor/LB/router > proxy
  • ServiceMesh.istio flow.traffic.流量
  • gateway
  • config.配置中心: 敏感信息 watch merge env hotload.热加载 switch.开关
  • MQ.消息队列: bus.消息总线 stream.消息驱动 EDA.事件驱动 rocketmq ampq=rabbitmq nats nsq kafka activeMQ RocketMQ
  • job: AsyncTask cron consumer
  • 事务: DTM seata
  • other: session id.NanoID/UUID/雪花算法Snowflake

回顾下微服务的发展

  • 历史: MVC>RPC>SOA>MS Monolithic.单体巨石应用 LightwaySOA 分封制 中台 技术上不是问题,意识比工具重要
  • 理论: 康威定律 Distributed.分布式
  • 设计: 小即是美 单一职责 尽可能早创建原型 可移植性比效率更重要
  • 原则: 单一职责 自治 轻量通信 粒度 有效拆分->敏捷开发部署
  • 冰山模型 framework: 开发框架+容器技术+基建
    • spring: alibaba netfix
    • php: hyperf
    • go: kitex zeromicro.gozero cloudwego

微服务治理:体系、架构与实践 2020.5
微服务设计模式 2019

可以根据自己的实际情况进行剪枝/划重点, 上面列举了笔者接触过的内容

微服务+云原生的发展

这里引用一下 周志明-凤凰项目(原文地址不贴了, 这2个关键词就能找到) 中的内容

  • 微服务组件相关
功能 Kubernetes Spring Cloud other
弹性伸缩 Autoscaling N/A ...
服务发现 KubeDNS / CoreDNS Spring Cloud Eureka consul etcd zookeeper nacos dubbo
配置中心 ConfigMap / Secret Spring Cloud Config apollo etcd consul nacos acm
服务网关 Ingress Controller Spring Cloud Zuul ...
负载均衡 Load Balancer Spring Cloud Ribbon http.feign/guzzle
服务安全 RBAC API Spring Cloud Security ...
跟踪监控 Metrics API / Dashboard Spring Cloud Turbine sleuth/zipkin/jaeger/skywalking
降级熔断 N/A Spring Cloud Hystrix sentinel
  • 微服务中演进的架构
    • 单体
    • SOA
    • 微服务 over 各个组件(对应上面表格的 SpringCloud + other)
    • 微服务 over K8s (对应上表的 kubernetes)
    • 微服务 over k8s+ServiceMesh(比如istio)
    • 微服务 over Serverless

serverless=终局?

上面微服务的演进(或者说系统架构的演进)到 serverless 划上句号了, 不同人有不同看法, 我倒觉得没必要去争辩这个, 从业务应用的角度来看, 开发阶段不在需要关心微服务中各个组件的概念, 回归了应用本身, 或者说业务应用已经可以不用去理解微服务, CICD后它就已经在那里

现在的开发流程

  • 本地 run/debug/test 跑通 -> docker build 跑通 -> k8s deploy

写在最后

顺带一提应用/服务上线后的一些基础设施:

  • log: json输出到stdout -> sidecar自动搜集 -> 日志服务自动解析 json
  • OpenTelemetry(java/go/py能无侵入自动打点) -> apm -> 监控告警
  • 配置管理/ENV管理 -> configmap / SecretConfigmap
  • 网络
    • 服务间调用 -> k8s Service
    • 出公网.NAT网关
    • 入公网.LB

目前正在 Serverless应用引擎(新版) 上进行实践: 前方有路, 实践者正在前行

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容