Home

Awesome

开宗明义

集群与分布式

很多时候,我们在讨论技术架构时,都离不开集群、分布式以及现在的微服务。为了厘清三者关系,请看下方示例:

一个任务,1 台机器执行 1 个任务需要 1 小时完成,执行 10 个任务就需要 10 个小时,现在购置 10 台机器后,如何提升效率?

集群与分布式

由上我们可以看出,分布式中的每一个节点(服务器),都可以作为集群部署,而集群就不一定是分布式的了。

好的设计应该是分布式和集群的集合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对子业务进行集群部署,这样每个独立的子业务出现了问题,不会对整个系统造成影响。

微服务与 SOA

微服务
微服务只是一种架构风格,将一个大型软件拆分为多个松耦合的微服务,各个微服务可以独立部署,即将业务拆分为多个独立的单元,单元之间通过网络实现数据交互。

SOA
业务系统分解为多个组件,让每个组件独立提供离散、自治、可复用的服务能力,通过服务的组合和编排来实现上层的业务流程。

笔者这里认为微服务其实是分布式理念按照 SOA 的设想后的一种严格实现,但是微服务的应用可以部署在多台服务器上,也可以在同一个服务器(原则上不允许)。

微服务相比分布式服务来说,服务粒度更小,服务之间耦合度更低,分布式服务最后都会向微服务架构演化,这是一种趋势,不过微服务化后也会带来很多新的挑战,如:服务粒度小、数量大造成的运维艰难,当然这时候也诞生了针对该问题的解决方案,如 docker,k8s。

分布式系统概念

分布式系统由一组计算节点组成,这些节点之间通过通过网络进行通信,并且能够协调工作以完成共同的任务,通过分布式,让多个廉价的计算机通过协作来达到昂贵的大型机的处理能力。相对而言,降低了成本。

常见的分布式应用主要包括:

分布式理论最大的挑战是如何将任务分发到不同的计算机节点,可以利用分片机制(partition)。

分布式系统特性与标准:

分布式系统问题

分布式与单机系统相比,会遇到更多的挑战:

解决上述问题的办法是:冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,多个节点复制存储同一份数据,以此增强可用性与可靠性。同时,Replication 也会带来性能的提升,比如数据的 locality 可以减少用户的等待时间。

Partition 和 Replication 是解决分布式系统问题利器,但也引入了更多的问题,最常见的问题是一致性问题:因为复制集各个副本之间需要保持数据的一致性,一致性在系统的角度和用户的角度又有不同的等级划分。如果要保证强一致性,那么会影响可用性与性能,在一些应用(比如电商、搜索)是难以接受的。如果是最终一致性,那么就需要处理数据冲突的情况,这也是不同的一致性解决方案理论的诞生缘由,如:CAP、FLP。

简单的分布式架构

架构图如下所示:
分布式架构

在客户端,用户使用 Web、APP、SDK,通过 HTTP、TCP 连接到分布式系统后:

分布式常见的技术实现

架构体系:      SOA、微服务、云原生
负载均衡:      Nginx、LVS
开发框架:      SpringCloud、ServiceComb、go-micro、go-kit
容器领域:      Docker、Kubernetes、Prometheus、Istio
缓存系统:      memcache、redis
协调中心:      zookeeper、etcd、consul
rpc框架:       grpc、dubbo、brpc
消息队列:      kafka、rabbitMQ、rocketMQ
数据存储:      mysql、oracle、MongoDB、HBase
数据搜索:      elasticsearch、solr
日志系统:      rsyslog、elk、flume
数据平台:      hadoop、spark、storm、akka

一 架构相关书籍

1.1 架构基础

1.2 分布式理论

经典书籍:

下列书籍评分不高,但是部分章节值得一看:

1.3 微服务

微服务设计:

微服务落地:

1.4 架构之术

二 开发禅道

2.1 设计模式

2.2 代码之术

2.3 软件工程

三 常用软件

3.1 数据库

MySQL:

Redis:

MongoDB:

PostgreSQL:

Oracle:

3.2 web 服务器

3.2 消息队列

3.4 Docker&k8s

docker:

k8s:

附录:笔记汇总

OverNotehttps://github.com/overnote 笔者的地址https://github.com/ruyuejun

OverNote 分类