分布式系统的设计几个要注意的地方

标签: 分布 系统 设计 | 发表时间:2014-12-25 15:14 | 作者:anzhsoft2008
出处:http://blog.csdn.net

最近在做系统升级,由于当时设计的局限,导致系统不停服,保证服务的做法非常麻烦。当时再定方案的时候,由于自己在这方面没有经验,导致有些乐观。到了实际做的时候,预期时间至少比预想的多了一周的时间,要知道,在

互联网公司,一周的时间是个非常长的时间。而这一周,还包括了OT。

在这里总结一下分布式系统设计的大忌,本来想试着分一下级,但是还是算了,一来标准太多,无法制定一个合适的规则来界定;二来自己的经验也在增长,低调一下是自己也没详细的研究过超过5个分布式系统;三来做事情还是要严谨,不做没有十足把握的事情。

1. 服务接口的设计至关重要

   虽然大家口口声声说对于一个集群来说,每台机器都可能出故障。但是做方案设计的时候,某些资源却向用户直接暴漏了服务的实际地址。对于一个服务几年的服务器来说,故障的可能性非常大,尤其是如果这个服务器的平时负载比较高的话。我不清楚一台服务器的平均保修时间是多少,但是绝对不可能是几个小时能搞定的,这个时间少则一天,多则半个月甚至更长。对于一些高级的用户,它会使用本地的cache,或者其他的策略来屏蔽调用服务不可用带来的影响,但是,几天的停服对于用户方的影响是无论如何不可能忽略的。

这种问题发现后,可能简单的发布一个新版本的api,或者一个简单的配置文件就可以纠正。但是对于线上用户来说,他们运行的是一个一直都在running状态的服务。这个简单的改正可能需要他们服务重启,这对于一个大型的集群来说,带来的成本非常高。如果是因为这个服务的不可用导致了线上事故,那么应用方肯定会非常主动的去修正这个错误。但是如果使用架构方发现了这个问题,而主动推动应用方去修改,可能应用方会因为各种原因而推脱。

因此,设计服务的接口一定要注意,这个接口一定要是稳定的,而且后台服务的故障,升级等操作绝对对于用户要是透明的。不要将服务的实际地址暴漏给用户方:这台服务器终有一天会挂掉。尤其是对于C++等需要编译的api来说,这个接口就更加重要了。毕竟api的修改对于应用方来说意味着要重新编译;重新编译意味着要重新走一下发布流程:至少要提测吧。

2. 后台升级要做到对用户透明

这实际上是又是一句大家都知道的。但是设计时确实有时候会忽略。对于弹性计算系统来说,服务的伸缩是必须的,这个也是设计的目标之一。但是对于一些小规模的计算集群来说,可能大家认为伸缩不是最重要的feature。最重要的feature就是能够快速的完成系统设计和实现,为用户服务。但是实际上,这个通过一些简单的修改,就可以完成:Worker上带一个agent和master或者meta server通信,保持心跳。心跳超时的Worker会被下线,以后的服务都不会发送到这个Worker上来。而新加入的Worker则会加入集群接收计算任务。这个不单是应对服务的伸缩,也是为了应对机器的故障。因此不用太大的改动,就可以将一个系统从山寨提升到真正的可用。

一个系统的服务质量,不是说在一般情况下的服务是可靠的,除了网络丢包、网络传输造成的问题外,服务质量可以做到10000个请求至多有1个失败就是说这个系统是可用的。评价服务质量的另外一个重要指标是全年可服务时间。这个要将机器故障,机房故障考虑在内。如果依赖于运行环境没有问题,才能达到99.99,那么这个服务就有点山寨,对于重要的应用方来说,这种服务不可接受。

 

3. 应用方设计时候需要衡量后台服务失败的影响

如果服务的可靠性要求非常高,比如是直接面向互联网用户的,要求任何时间都能够对互联网用户提供服务,那么就需要在调用服务时做下服务不可用的预案。甚至做下超时机制:如果服务调用指定时间不返回,那么需要有其余的逻辑来替代。

 

当然了本次还遇到很多其他的痛点,每个都是设计上得小瑕疵,当时注意的话不会增加工作量,或者增加很少的工作量就可以做到可用。互联网强调快,那么底线应该是可用吧。易用可能是更要的要求。当然了这个可能可以一种互联网风格,就是一个事情可以快速做完,快速上线。当时上线时候也做了二期需要做的改进,但是后台发现上线效果好,符合预期。又去做其它高优先级的事情去了。导致原来设计的局限就永远的停留在那里了,这就是为后来人埋下一个坑。。

本次升级的时候,由于信息的不一致导致一台服务器停服,导致大面积的失败。后来为了避免其它的集群出现类似的问题,因此所有的信息都重新确认了一遍。而这带来了半天的枯燥工作。因此,自己做设计的时候,一定要注意,不求最好,但求可用,在机器故障,服务升级,对于用户来说,服务都可用。

BTW,正在做一个架构的设计,细节是魔鬼,正在和魔鬼做斗争。


作者:anzhsoft2008 发表于2014-12-25 7:14:49 原文链接
阅读:38 评论:0 查看评论

相关 [分布 系统 设计] 推荐:

分布式系统设计策略

- - 互联网 - ITeye博客
摘自 《深入分布式缓存:从原理到实践》. 分布式系统本质是通过低廉的硬件攒在一起以获得更好地吞吐量、性能以及可用性等. 分布式系统有一些通用的设计策略,也是在分布式环境下普遍关心的几个问题:. 在分布式环境中,一般会有多个节点来分担任务的运行、计算或程序逻辑处理. 如上图所示,Client请求Server,Server转发请求到具体的Node获取请求结果.

【分布式系统工程实现】GFS&Bigtable设计的优势

- hikerlive - 淘宝核心系统团队博客
目前,知名度比较高的通用存储系统包括:Google GFS&Bigtable,Amazon Dynamo,Microsoft Azure存储系统及Yahoo PNUTS. 其中,GFS&Bigtable,Azure存储系统及Yahoo PNUTS都有总控节点,Amazon Dynamo采用去中心化的P2P设计.

分布式系统的设计几个要注意的地方

- - CSDN博客推荐文章
最近在做系统升级,由于当时设计的局限,导致系统不停服,保证服务的做法非常麻烦. 当时再定方案的时候,由于自己在这方面没有经验,导致有些乐观. 到了实际做的时候,预期时间至少比预想的多了一周的时间,要知道,在. 互联网公司,一周的时间是个非常长的时间. 在这里总结一下分布式系统设计的大忌,本来想试着分一下级,但是还是算了,一来标准太多,无法制定一个合适的规则来界定;二来自己的经验也在增长,低调一下是自己也没详细的研究过超过5个分布式系统;三来做事情还是要严谨,不做没有十足把握的事情.

分布式日志收集系统Apache Flume的设计介绍

- - CSDN博客架构设计推荐文章
Flume是Cloudera公司的一款高性能、高可能的分布式日志收集系统. 现在已经是Apache Top项目. 同Flume相似的日志收集系统还有 Facebook Scribe, Apache Chuwka, Apache Kafka(也是LinkedIn的). Flume是后起之秀,本文尝试简要分析Flume数据流通过程中提供的组件、可靠性保证来介绍Flume的主要设计,不涉及Flume具体的安装使用,也不涉及代码层面的剖析.

[转] 分布式存储系统(GlusterFS, Swift, Cassandra)设计对比

- - 忘我的追寻
之前转过一篇分布式文件系统比较的文章, 几大分布式文件系统全方位比较,这里再从存储的角度转一个. 应该说者三个开源软件各自侧重的领域不一样,但是都具备分布式存储的特征,因此这篇文章主要是从存储的角度来进行对比. 1、 文件定位:三者均采用hash算法,另外amazon的Dynamo也是采用一致性哈希;还有采用中心路由的定位方式:如HBASE,HDFS.

高并发服务端分布式系统设计概要

- - 博客 - 伯乐在线
写这篇文章的目的,主要是把今年以来学习的一些东西积淀下来,同时作为之前文章《 高性能分布式计算与存储系统设计概要》的补充与提升,然而本人水平非常有限,回头看之前写的文章也有许多不足,甚至是错误,希望同学们看到了错误多多见谅,更欢迎与我讨论并指正. 我大概是从2010年底起开始进入高并发、高性能服务器和分布式这一块领域的研究,到现在也差不多有三年,但其实很多东西仍然是一知半解,我所提到的许许多多概念,也许任何一个我都不能讲的很清楚,还需要继续钻研.

分布式会话跟踪系统架构设计与实践

- - 美团点评技术团队
本文整理自美团点评技术沙龙第08期:大规模集群的服务治理设计与实践. 美团点评技术沙龙由美团点评技术团队主办,每月一期. 每期沙龙邀请美团点评及其它互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域. 目前沙龙会分别在北京、上海和厦门等地举行,要参加下一次最新沙龙活动. 赶快关注微信公众号“美团点评技术团队”.

基于分布式环境下限流系统的设计

- - Zhisheng的博客
就拿前些天的双十一的 “抢券活动” 来说,一般是设置整点开始抢的,你想想,淘宝的用户群体非常大,可以达到亿级别,而服务接口每秒能处理的量是有限的,那么这个时候问题就会出现,我们如何通过程序来控制用户抢券呢,于是就必须加上这个限流功能了. 1、服务接口所能提供的服务上限(limit)假如是 500次/s.

分布式文件系统FastDFS设计原理及技术架构

- - mysqlops
FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务. Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存 储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费.

[译] 支付核心系统设计:Airbnb 的分布式事务方案简介

- - IT瘾-dev
导读:微服务架构下的支付系统,由于其需要在性能和一致性之间做很多权衡,带来设计和实现的复杂性. Airbnb的支付系统需要对接全球很多个国家的支付系统,因此带来很大的复杂性. 本文详细论述了Airbnb如何使用分布式事务的相关技术来保证支付系统的数据一致性和性能,十分值得一读. 过去几年中,Airbnb一直在将其基础架构迁移到SOA.