这些分布式知识,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 条评论
登录 后参与评论

相关文章

来自专栏架构之美

互联网架构究竟如何演进?

1452
来自专栏张善友的专栏

使用 NoSQL 数据库分析大规模数据

本文转自IBM的developerWorks,主题是关于使用NoSQL存储和处理大规模数据,文章列举了一些循序渐进的学习资料,包括了视频音频和文字材料,是一个很...

2086
来自专栏CSDN技术头条

世上没有完美的架构

微服务架构的技术体系、社区目前已经越来越成熟。在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构演进时,很多架构师、运维工程师会考虑是否需要搭建微服务架...

1287
来自专栏腾讯技术工程官方号的专栏

TEG Cheers | 腾讯技术工程运维技术沙龙精彩回顾(内置现场视频)

521
来自专栏熊二哥

《大型网站技术架构》学习笔记-01概述

李智慧老师的大型网站架构已经买了两年了,之前大体看过一次,不过还未内化为自己的本领,最近项目空闲,决定尽力掌握这部分的知识,以跟上大师的节奏。今天是儿童节,祝自...

2045

弹性伸缩:云如何提供巨大的推动力

如果您正在考虑将部分或全部IT基础设施迁移到云,那么可能有助于说服人们加入云计算的一个优势是能够使用弹性伸缩。通过弹性伸缩,你可以在任何给定的时间内...

1958
来自专栏Java架构

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

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

4077
来自专栏云计算D1net

Sahara将加速OpenStack与Hadoop的融合

由Hortonworks、Mirantis、RedHat联合发起的开源项目Sahara3月19日正式从OpenStack孵化项目中毕业,成为其核心项目。该...

2676
来自专栏JAVA高级架构

京东架构专家分享京东架构之路

京东咚咚架构演进 咚咚是什么?咚咚之于京东相当于旺旺之于淘宝,它们都是服务于买家和卖家的沟通。 自从京东开始为第三方卖家提供入驻平台服务后,咚咚也就随之诞生了。...

3299
来自专栏CDA数据分析师

聊一聊数据存储的七个技巧

如今,更为经济的闪存存储器在可预见的未来有望打破存储设备在应用性能上的瓶颈。为了充分利用闪存,人们需要以正确的方式和正确的技术来实现它。这样,就可以从整体的固态...

964

扫码关注云+社区