前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈对云原生应用的理解

谈谈对云原生应用的理解

原创
作者头像
王昂
修改2019-08-04 12:46:20
3.7K0
修改2019-08-04 12:46:20
举报
文章被收录于专栏:Andy的技术专栏Andy的技术专栏

  微服务后时代是什么?炒得最火的就是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进程来辅助应用非功能需求,如流量控制、权限认证等

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 云原生诞生背景是什么?
  • 云原生能帮助研发解决什么问题?
  • 云原生应用的定义是什么?
  • 云原生当前生态圈是怎么样的?
  • 云原生生态的基石 kubernetes
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档