云原生,分布式与微服务

云原生,分布式与微服务_第1张图片

目前比较常用的分布式系统的设计,HDFS 或者 GFS(分布式文件系统)、Kafka 和 Pulsar(分布式消息队列),Redis Cluster 和 Codis(分布式缓存),MySQL 的分库分表(传统关系型数据库的分布式方案),MongoDB 的 Replica Set 和 Sharding 机制集以及去中心化的 Cassandra(NoSQL 数据库),中心化的 TiDB 和去中心化的 CockroachDB(NewSQL)
每秒处理10万高并发订单的某集团支付系统架构分享
分布式系统中的死锁处理
分布式系统常用技术栈

  • nginx, rpc, zookeeper, 消息中间件(jms, activeMq,rabbitMq,rocketMq), NoSQL(redis, mongodb)
    分布式系统基础总结

serverless

  1. 基于 kubernetes 的 serverless 组件,比如 kubeless
  2. knative 基于 kubernetes 和 istio 的 serverless 开源实现,目标是为了提供更高层次的抽象,让开发者无需关注基础设施(虚拟机或者容器,网络配置,容量规划),而专注于业务代码即可

一 、分布式常用技术

    1. 分布式系统的架构体系

基于对象的体系机构

面向服务的架构(SOA)

REST风格的架构

微服务架构(MSA)

容器技术

Serverless架构

    1. 分布式消息服务

Apache ActiveMQ

RabbitMQ

RocketMQ

Apache Kafka

  • 3.分布式计算

MapReduce

Apache Hadoop

Apache Spark

Apache Mesos

  • 4.分布式存储

Bigtable

Apache HBase

Apache Cassandra

Memcached

Redis

MongoDB

  • 5.分布式监控

Nagios

Zabbix

Consul

Zookeeper

  • 6.分布式的版本控制

Bazaar

Mercurial

Git

  • 7.RESTfulAPI、微- 服务及容器技术

Jersey

Spring boot

Docker

二、微服务

项目管理敏捷开发scrum和Kanban有什么区别?

  • 微服务架构的实现
    云原生,分布式与微服务_第2张图片

云原生,分布式与微服务_第3张图片

  • 微服务架构技术栈云原生,分布式与微服务_第4张图片
    云原生,分布式与微服务_第5张图片

3. 云原生

  1. 云服务模型

    • IaaS(Infrastructure-as-a-Service,基础设施即服务),是云服务的最底层,主要提供一些基础资源。
    • PaaS(Platform-as-a-service,平台即服务),提供软件部署平台,其抽象了硬件和操作系统细节,使得应用可以无缝地扩展。开发者只需要关注自己的业务逻辑,不需要关注底层。
    • SaaS(Software-as-a-service,软件即服务),是指软件的开发、管理、部署都交给第三方,提供商会为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台。企业不需要关心技术问题,拿来即用。
  2. 云原生

k8s 是云原生基金会的第一个孵化项目,事实上是在围绕 k8s 建立云原生生态。其中,容器是 k8s 的底层引擎;服务网格则是建立在 k8s 上的针对请求的扩展功能;不可变基础设施是现代运维的基石;声明式 API 是 k8s 的编码方式;微服务是一种软件架构,云原生中的微服务扩大了云原生的版图。

云原生,并不是一种具体的技术或者框架,而是一类思想的集合,其中的技术要点包括服务网格(service mesh)、微服务和容器化(如容器化 Docker)等;管理要点则包括 DevOps、康威定律等。因此,可以说云原生在一定层面上重构了互联网产品的开发模式
云原生,分布式与微服务_第6张图片

  1. 12因素
    “12 因素”理论适用于以任意语言编写,并使用任意后端服务(数据库、消息队列、缓存等)的应用程序,它是关于如何编码、部署和运维的原则
    云原生,分布式与微服务_第7张图片
    “12 因素”的内容

编码有关:基准代码、构建发布运行、开发/生产环境等价 ,与源码管理相关;

部署有关:显式依赖、配置、独立进程、后端服务、端口绑定,与微服务该如何部署以及如何处理依赖相关;

运维原则:并发、易处理、日志、管理进程,与如何简化微服务的运维相关。

  1. 具体内容
    12 因素的具体内容如下所示。

Codebase:基准代码。一份基准代码,多份部署。在统一的代码库中为代码配置、测试和脚本部署建立独立的项目和模块。

Dependencies:显式声明依赖关系。通过 Bundler、NPM 等工具隔离依赖性,不依赖于部署环境。

Config:在环境中存储配置。通过操作系统级的环境变量将配置信息或其他可能存在的不同信息(如开发环境、预生产环境、生产环境)应用到各个部署环境中。

Backing services:把后端服务当作附加资源。数据库、缓存等均被作为附加资源在不同环境中被同等调用,每个不同的后端服务都是一份资源。

Build, release, run:严格分离构建和运行。基准代码进行部署需要三个步骤,构建阶段,将代码仓库转化为可执行包的过程;发布阶段,将构建的结果和当前部署所需的配置相结合,并能够立刻在运行环境中投入使用;运行阶段,是指针对选定的发布版本在执行环境中启动一系列应用程序的进程。

Processes:进程。以一个或多个无状态进程运行应用。

Port binding:通过端口绑定提供服务。互联网应用可以通过端口绑定来提供服务并随时监听所有发送至该端口的请求。

Concurrency:并发。通过进程模型进行扩展。

Disposability:易处理、快速启动和优雅终止可最大化健壮性。

Dev/prod parity:开发环境与生产环境等价。保持开发、预发布、线上环境的相似性来实现持续交付与部署。

Logs:日志。把日志当作事件流,允许执行环境通过集中式服务来收集、聚合、检索和分析日志。

Admin processes:管理进程。后台管理任务当作一次性进程运行,如数据库迁移。

“12因素”对于构建 Web 应用程序或 SaaS 平台具有指导作用。虽说提出之后已有八年之久,可能有些细节跟不上最新的体系架构,但“12 因素”依旧是目前最为系统的云原生应用开发指南。你在开发时可以依旧参考它,但也不用拘泥于教条规则。
云原生,分布式与微服务_第8张图片

4. 微服务

云原生更侧重应用程序的运行环境,它是以 k8s 和容器为基础的云环境;而微服务架构则对应于应用程序的软件架构
云原生,分布式与微服务_第9张图片
CNCF LandScape场景

5. 微服务典型架构

云原生,分布式与微服务_第10张图片

云原生,分布式与微服务_第11张图片

你可能感兴趣的:(微服务,分布式,云原生,微服务)