这些分布式知识,BAT的架构师都在用!一,通信二,伸缩性三,稳定性四,可维护性

前一段时间在网上看见了一篇文章内容大致是作为一个架构师你需要拥有什么样的能力,其中不过是包括以下几个点:

1、对于Java基础技术体系(包括JVM、类装载机制、多线程并发、IO、网络)有一定的掌握和应用经验。

2、对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式;

3、熟练掌握目前流行开源框架(spring/springmvc/ibatis),并且对其核心思想、实现原理有一定认知;

4、熟悉Oracle、MySQL等数据库开发与设计以及缓存系统REDIS或 Memcached的设计和研发;

5、熟悉底层中间件、分布式技术(包括缓存、消息系统、热部署、JMX等)

6、至少一种Java应用服务器如tomcat

7、精通shell编程,熟练应用awk、sed、grep、strace、tcudump、gdb等常用命令;

8、有大型分布式、高并发、高负载(大数据量)、高可用性系统设计开发经验

9、对配置管理和敏捷研发模式有所了解

10、业务能力

当然以上的十点都是一个高级架构所应该掌握的或者说已经有拥有的能力,而就算我们知道架构师需要这样的能力了,其实离架构师的阶段还差很远,就像你高考的时候知道要考数理化,政史地。我们知道这些是考试的科目,而如何去得到这些东西或者去如何应对高考中的每个知识点,所以知道应该要掌握技术的方向之后当然就是去学习里面的具体知识;

下面我就以分布式架构这个专题来介绍下需要哪些具体的知识点,你又如何来获得这些知识点;

一,通信

既然是分布式系统,系统间通信的技术就不可避免的要掌握。

首先要掌握一些基础知识,例如网络通信协议(诸如TCP/UDP等等)、网络IO(Blocking-IO,NonBlocking-IO、Asyn-IO)、网卡(多队列等);更偏应用的层面,需要了解例如连接复用、序列化/反序列化、RPC、负载均衡等。

通信连接方式:

大量的连接通常会有两种方式:

1.大量client连一个server

在现如今NonBlocking-IO这么成熟的情况下,一个支持大量client的server已经不那么难写了。

有一个点要特别注意,就是当server挂掉的时候,不能出现所有client都在一个时间点发起重连,那样基本就是灾难。

通常可以采用的方法是client重连前都做随机时间的sleep,另外就是重连的间隔采取避让算法。

二,伸缩性

分布式系统基本就意味着规模不小了,对于这类系统在设计的时候必须考虑伸缩性问题,架构图上画的任何一个点,如果请求量或者是数据量不断增大,怎么做到可以通过加机器的方式来解决,当然,这个过程也不用考虑无限大的场景,如果经历过从比较小到非常大规模的架构师,显然优势是不小的,同样也会是越来越稀缺的。

伸缩性的问题围绕着以下两种场景在解决:

1.无状态场景

无状态场景通常会把很多状态放在db,当量到一定阶段后会需要引入服务化,去缓解对db连接数太多的情况。

2.有状态场景

所谓状态其实就是数据,通常采用Sharding来实现伸缩性,Sharding有多种的实现方式,常见的有这么一些:

2.1规则Sharding

2.2一致性Hash

2.3Auto ShardingAuto Sharding的好处是基本上不用管数据搬迁,而且随着量上涨加机器就OK,但通常Auto Sharding的情况下对如何使用会有比较高的要求,

而这个通常也就会造成一些限制,这种方案例如HBase。

2.4CopyCopy这种常见于读远多于写的情况,实现起来又会有最终一致的方案和全局一致的方案,最终一致的多数可通过消息机制等,

全局一致的例如zookeeper/etcd之类的,既要全局一致又要做到很高的写支撑能力就很难实现了。

三,稳定性

作为分布式系统,必须要考虑清楚整个系统中任何一个点挂掉应该怎么处理(到了一定机器规模,每天挂掉一些机器很正常),同样主要还是分成了无状态和有状态:

1.无状态场景对于无状态场景,通常好办,只用节点发现的机制上具备心跳等检测机制就OK,经验上来说无非就是纯粹靠4层的检测对业务不太够,通常得做成7层的,当然,做成7层的就得处理好规模大了后的问题

2.有状态场景全局一致类型的场景中,如果一台挂了,就通常意味着得有选举机制来决定其他机器哪台成为主,常见的例如基于paxos的实现。可维护性整个系统环境应该怎么搭建,部署,配套的维护工具、监控点、报警点、问题定位、问题处理策略等等。

四,可维护性

维护性是很容易被遗漏的部分,但对分布式系统来说其实是很重要的部分,例如整个系统环境应该怎么搭建,部署,配套的维护工具、监控点、报警点、问题定位、问题处理策略等等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

【译文】怎样学习R(上)

有奖转发活动 回复“抽奖”参与《2015年数据分析/数据挖掘工具大调查》有奖活动。 ? 何品言翻译,广东科技学院大学生,喜欢R语言和数据科学。 王陆勤审核,从事...

3366
来自专栏极限编程

微服务架构下的测试应对策略(下)

消费者驱动契约测试的流程是,消费者定义他们期望的API或消息是什么样子,这些期望即为契约,从这些契约可以生成存根,此后消费者团队可以在构建过程中重复使用它们。消...

1584
来自专栏Java架构

这些分布式知识,BAT的架构师都在用!

前一段时间在网上看见了一篇文章内容大致是作为一个架构师你需要拥有什么样的能力,其中不过是包括以下几个点:

4197
来自专栏云计算D1net

影响云计算性能因素剖析

如今出现了很多基于云计算技术的各种云服务,可是如何去衡量一个云服务的好与差,并没有很清晰的标准。其实,对于云服务,一定程度上是由云计算技术的性能所决定的。说到性...

2856
来自专栏Kirito的技术分享

以Dubbo为例,聊聊如何为开源项目做贡献

Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一天自己也可以给开...

1063
来自专栏纯洁的微笑

微服务2.0技术栈选型手册

一晃三年过去,微服务技术生态又发生了巨大变化,容器,PaaS,Cloud Native,gRPC,ServiceMesh,Serverless等新技术新理念你方...

943
来自专栏逸鹏说道

架构漫谈(八):从架构的角度看如何写好代码

在第六篇文章中,我们得出一个结论,软件架构实际上包括了:代码架构,以及承载代码运行的硬件部署架构。实际上,硬件部署架构最终还是由代码的架构来决定。因为代码架构不...

3478
来自专栏大数据和云计算技术

​大数据和云计算技术周报(第35期)

“大数据” 三个字其实是个marketing语言,从技术角度看,包含范围很广,计算、存储、网络都涉及,知识点广、学习难度高。

972
来自专栏云计算D1net

重叠网络——什么让我们等了这么长时间?

虚拟化大获成功,是因为它实现了最初承诺的优势,包括优化硬件利用率,减少服务器泛滥和最大限度增加服务器硬件投资回报。这是通过以下途径实现的:对服务器的计算资源(C...

3317
来自专栏BestSDK

深度解析——短视频SDK的前世今生

2016 年中国移动短视频用户数为 1.5 亿,今年预计会达到 2.4 亿,增长率高达 58.2%,可见短视频的热度在一直提升;近几年,短视频的生产模式在不断演...

7427

扫码关注云+社区