谈谈对云原生应用的理解

  微服务后时代是什么?炒得最火的就是Cloud Native。顾名思义,云原生就是面向云设计的应用,自从2013年Matt Stine提出概念后,更多是一套技术体系和方法论,官方定义一直在演变,但核心还是通过基础云平台、云中间件、微服务、容器编排调度、Devops的优化整合,来帮助企业提高研发效率,做到业务更快交付。

  抽空读完《未来架构-从服务化到云原生》,结合笔记也谈谈对云原生的一些简单理解

目录

  • 云原生诞生背景是什么?
  • 云原生能帮助研发解决什么问题?
  • 云原生应用的定义是什么?
  • 云原生当前生态圈是怎么样的?
  • 云原生生态的基石 kubernetes

云原生诞生背景是什么?

  • 信息技术3个阶段:软件 -> 开源 -> 云服务
  • 后台架构演进:3层MVC -> 分布式服务SOA -> 云原生架构
  • 当前互联网业务核心挑战:业务快速迭代、业务组合复杂、海量用户、流量突增、7*24小时高可用(云原生必须擅长解决这些问题
  • 新技术促进分水岭:容器docker,编排调度 kubernetes

云原生能帮助研发解决什么问题?

云原生应用的定义是什么?

  • 云计算本质:按需分配资源和弹性计算
  • 云原生应用特点:核心是利用按需分配和弹性伸缩来设计的应用,让应用更适合在云平台运行
  • 云原生十二要素:Heroku团队提出的云应用设计理念
    1、Codebase 基准代码:同一应用对应一份基准代码,可在各环境部署,推荐git管理
    2、Dependencies 依赖:显示声明依赖组件,推荐Maven
    3、Config 配置:将配置存储在环境变量,与语言和运行系统无关
    4、Backing Services 后端服务:服务应作为松耦合资源,如修改配置就可把mysql切成tidb
    5、Build/Release/Run 构建/发布/运行:应用发布基于基准代码的构建,保证运行和基准代码同步
    6、Processes 进程:应用需作为无状态进程运行,确保水平伸缩
    7、Port Build 端口绑定:通过端口绑定对外服务,而非共享内存等
    8、Concurrency 并发:应用可通过水平伸缩来实现提高并发
    9、Disposability 已处理:可快速启动和优雅关闭,确保云调用的服务可用性
    10、Dev/Prod parity 开发和线上环境等价:保持开发、测试、现上环境等价,通过Jenkins工具规避差异
    11、Log 日志:使用日志流处理,不用本地日志,推荐ELK
    12、Admin Processes 管理进程:定时任务脚本也应准守这些规则
  • 云原生十二要素进阶:新增3个要素
    1、API first:设计出合理并且高兼容的应用接口是首要任务
    2、Telemetry:可通过遥测感知应用运营状态,而不用登陆机器
    3、Authentication and Authorization:建议用Oauth2.0和RBAC授权来保证应用安全

云原生当前生态圈是怎么样的?

  • CNCF:2015年Google牵头创立云原生计算基金会(www.cncf.io),致力于云原生技术普及和可持续发展,发布了标志性作品k8s,也维护云原生全景图
  • CNCF Landscape:https://github.com/cncf/landscape
  • App Definition and Development 应用定义开发层
    1、Database & Data Analytics:关系型数据oracle、mysql.. ,Nosql数据库mongodb、redis...,NewSql数据库tidb...,大数据处理hadoop、spark...
    2、Streaming:消息中间件kafka、rabbitmq...,流式计算框架strom、flink....
    3、SCM Software Config Management:推荐git主流
    4、App Definition:解决怎么描述一个应用,没有Maven很意外
    5、CI/CD:持续集成交付 jenkins、bamboo...
  • Orchestration & Management 编排与治理层
    1、Scheduling & Orchestration:调度(资源自动合理分配)与编排(对容器内应用治理),核心就是Kubernetes...
    2、Coordination & Service Discovery:提供高可用注册中心服务,zk、CoreDns、etcd...
    3、Service Management:远程通信gRPC、Thrift...,反向代理Hginx、HAProxy,服务治理zuul,还有比较火的Istio Envoy也属于这个范畴
  • Runtime 运行时层
    1、Cloud-Native Storage:云服务分布式文件系统hdfs、ClusterFs.. 提供日志、图片、文档存放,弱化单机磁盘存储
    2、Container Runtime:云原生应用选择容器作为轻量级运行载体,推荐docker主流
    3、Cloud-Native Network:云原生网络解决每个容器独立IP问题,推荐CNI(Container Network Interface)容器网络接口标准
  • Provisioning 供应保障层
    1、Host Management / Tooling:对物理/虚拟机(Node)的管理,核心是运维工具Ansible、Puppet...
    2、Infrastruction Automation:基础设施自动化工具,像Docker包管理Infrakit、简化k8s部署Helm...
    3、Container Registries:容器仓库负责镜像存储分发(docker push/pull),推荐Harbor主流
    4、Secure Images:提供保障镜像安全工具Clair、Twistlock...
    5、Key Management:提供秘钥管理Confidant...
  • Cloud 云设施层
    1、Public:公有云平台,像著名的AWS、Azure、阿里云、腾讯云...
    2、Private:私有云方案,像vmware、openstack...
  • Observability and Analysis:对各层系统的监控分析
    1、Monitoring:服务器指标Zabbix、容器指标CAdvisor、时序指标Prometheus、指标分析Garfana。采集->存储->分析->告警自动化流程
    2、Logging:不应该写本地磁盘,推荐ELK(Elasticsearch、Logstash、Kibana)主流
    3、tracing:调用链追踪,实践最有效的定位应用问题方案,推荐zipkin、jaeger...

云原生生态的基石 kubernetes

  • CNCF整个技术栈都是围绕k8s建立,不仅是解决了容器的编排问题,更进一步可以说对云原生应用提供了定义规范
  • kubernetes核心组件

    1、K8s Master:管理配置中心
    2、K8s Node:Pod运行的正真主机,一般为物理机、非k8s来管理。
    3、API Server:为各角色配置和验证数据
    4、etcd:配置管理
    5、Controller Manager:操作管理
    6、Scheduler:调度器
    7、Pod:最小的操作单元,管理、创建、销毁等。对应逻辑主机,有独立ip和port。
    8、Kube-Proxy:Node节点接入层
    9、Kubectl:集群命令管理工具
    10、cAdvisor:容器监控数据采集
    11、Namespace:资源和对象操作集合,用来隔离对象:

  • kubernetes分层设计

    1、Infrastruction:包括CRI(runtime)、CNI(network)、CSI(storage)、仓库镜像等
    2、Nucleus:k8s核心api,对外构建应用,对内提供插件环境
    3、Application Layer:负责部署路由,包含批处理任务、集群管理、DNS路由解析等
    4、Governance Layer:负责自动化管理策略,如核心HPA等
    5、Interface Layer:kubectl工具、客户端sdk

  • kubernetes相关原语
    1、对象:在k8s中几乎一切都是对象,本质是一个持久化实体,k8s通过这些实体来描述集群(有哪些应用运行在哪些Node,使用什么资源,重启升级策略等)
    2、对象描述(Spec):对象期望属性,通过.yaml文件描述,通过kubectl创建运行
    3、对象状态(Status):对象实际属性,任何状况下,k8s会尽量确保Status和Spec一致
    4、服务发现:解决Pod内应用寻址问题,核心Service、Ingress、Custom Load balancer3种方式
    5、权限控制:k8s集群作为多租户平台,需提供网络隔离(CNI插件)、资源隔离(namespace/pod)、身份隔离(RBAC)等安全机制
    6 Sidecar模式:通过松耦合Sidecar进程来辅助应用非功能需求,如流量控制、权限认证等
本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
谈谈对云原生应用的理解
  微服务后时代是什么?炒得最火的就是Cloud Native。顾名思义,云原生就是面向云设计的应用,自从2013年Matt Stine提出概念后,更多是一套技...
<<上一篇
下一篇>>