目前比较常用的分布式系统的设计,HDFS 或者 GFS(分布式文件系统)、Kafka 和 Pulsar(分布式消息队列),Redis Cluster 和 Codis(分布式缓存),MySQL 的分库分表(传统关系型数据库的分布式方案),MongoDB 的 Replica Set 和 Sharding 机制集以及去中心化的 Cassandra(NoSQL 数据库),中心化的 TiDB 和去中心化的 CockroachDB(NewSQL)
每秒处理10万高并发订单的某集团支付系统架构分享
分布式系统中的死锁处理
分布式系统常用技术栈
基于对象的体系机构
面向服务的架构(SOA)
REST风格的架构
微服务架构(MSA)
容器技术
Serverless架构
Apache ActiveMQ
RabbitMQ
RocketMQ
Apache Kafka
MapReduce
Apache Hadoop
Apache Spark
Apache Mesos
Bigtable
Apache HBase
Apache Cassandra
Memcached
Redis
MongoDB
Nagios
Zabbix
Consul
Zookeeper
Bazaar
Mercurial
Git
Jersey
Spring boot
Docker
项目管理敏捷开发scrum和Kanban有什么区别?
云服务模型
云原生
k8s 是云原生基金会的第一个孵化项目,事实上是在围绕 k8s 建立云原生生态。其中,容器是 k8s 的底层引擎;服务网格则是建立在 k8s 上的针对请求的扩展功能;不可变基础设施是现代运维的基石;声明式 API 是 k8s 的编码方式;微服务是一种软件架构,云原生中的微服务扩大了云原生的版图。
云原生,并不是一种具体的技术或者框架,而是一类思想的集合,其中的技术要点包括服务网格(service mesh)、微服务和容器化(如容器化 Docker)等;管理要点则包括 DevOps、康威定律等。因此,可以说云原生在一定层面上重构了互联网产品的开发模式
编码有关:基准代码、构建发布运行、开发/生产环境等价 ,与源码管理相关;
部署有关:显式依赖、配置、独立进程、后端服务、端口绑定,与微服务该如何部署以及如何处理依赖相关;
运维原则:并发、易处理、日志、管理进程,与如何简化微服务的运维相关。
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 因素”依旧是目前最为系统的云原生应用开发指南。你在开发时可以依旧参考它,但也不用拘泥于教条规则。
云原生更侧重应用程序的运行环境,它是以 k8s 和容器为基础的云环境;而微服务架构则对应于应用程序的软件架构
CNCF LandScape场景