
大规模系统架构
文章平均质量分 90
丁码农
擅长大规模(高并发、高可用、海量数据)互联网架构
展开
-
阿里巴巴稳定性保障体系
阿里巴巴稳定性保障体系作者介绍步崖,曾就职于阿里巴巴和蚂蚁金服。熟悉高并发、高可用架构,稳定性保障等。热衷于技术研究和分享,发表过”分布式事务”、”分布式缓存”等多篇文章被广泛阅读和转载前言我从业之初便开始扮演“救火队员”角色,经常去线上执行“救火”、止损、攻关等应急工作,再通过一系列的分析、推理、验证…“抽丝剥茧”的找出背后的根本原因并解决掉,仿佛“经验丰富、从容冷静、思维缜密”的侦探,非常有成就感。以前我一直认为线上问题定位、分析处理能力是技术人员的“看家功底”并常引..原创 2021-01-24 18:27:41 · 5791 阅读 · 3 评论 -
阿里巴巴开源限流降级神器Sentinel大规模生产级应用实践
阿里巴巴开源限流降级神器Sentinel大规模生产级应用实践题图:前言互联网上关于限流算法、Sentinel功能介绍、基本结构、原理分析的文章可谓汗牛充栋,我并不打算重复制造内容。我将为大家分享在实际工作和生产环境中使用、踩坑的经验。如果你正在做限流、熔断的技术选型,那么本文将会为你提供客观、有价值的参考;如果你将来要在生产环境中使用Sentinel,那么本文将会帮助你后续少走弯路;如果你正在准备求职面试,或许可以帮你的技能树和经验上增加亮点,避免你...原创 2021-01-24 18:16:50 · 829 阅读 · 1 评论 -
当我们在谈论“服务治理”的时候,都在谈论些什么?
高并发、高可用架构系列–带你构建大规模分布式服务阅读本(系列)文章,你将会收获:全面、体系化的了解大规模分布式系统中的服务治理一线互联网公司如何应对高并发、大流量场景,稳定性保障体系揭秘(高并发高可用必备)常见限流算法的实现,阿里巴巴(历年双十一)限流、熔断保护利器sentinel的设计原理和实践经验(高并发高可用必备)高性能、高可用配置中心的本质、架构设计思想、原理和实践经验(微服...原创 2020-01-05 17:51:10 · 719 阅读 · 1 评论 -
使用异常还是错误码?
#异常使用和处理建议###使用异常代替错误码这曾经是个社区争论不休的话题,多数人是选择异常替代错误码的。反对者中,有人认为不应该使用异常去控制程序流程,也有些人认为只有"数据库连不上"这种系统异常才算异常,还有些人认为异常会有额外的性能开销…使用异常代替错误码,可以使得代码更清晰,可读性更好,更符合面向对象。况且有些方法压根就是void的无返回值的。至于性能开销这个通常可以忽略。当然,这个...原创 2019-06-22 18:06:46 · 4493 阅读 · 0 评论 -
缓存在高并发场景下的常见问题
缓存一致性问题当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策略。一般会在数据发生更改的时,主动更新缓存中的数据或者移除对应的缓存。 缓存并发问题缓存过期后将尝试从后端数据库获取数据,这是一个看似合理的流程。但是,在高并发场景下,有可能多个请求并发的去从数据库获取数据,对后端数据库造成极原创 2016-12-05 12:41:24 · 9606 阅读 · 5 评论 -
RPC是什么?
RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用。远程调用的应用场景极其广泛,实现的方式也各式各样。原创 2016-12-04 12:54:32 · 47498 阅读 · 1 评论 -
如何提高缓存命中率
缓存命中率的介绍命中:可以直接通过缓存获取到需要的数据。不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。由此可见,在高并发的互联网系统中,缓存的命中率是至关重要的指标。如何监控缓存的命中率在memcach原创 2016-12-01 12:59:22 · 15028 阅读 · 3 评论 -
细说缓存在大型网站架构中的应用
缓存的基本知识在整个计算机体系构造中(无论是硬件层面还是软件层面),缓存都是无处不在的。在计算机硬件构造中,由于两种介质的速度不匹配,高速介质在和低速介质交互时速度趋向低速方,这就导致了高速介质的资源闲置。而通过引入第三种介质(速度和成本介于两者中间),将低速方读写的部分内容数据保存在该介质中,高速方大多数情况下则无需和低速方直接交互,这样就能整体提升了交互的性能。这就是计算机体系中缓存的由来。原创 2016-11-26 21:35:41 · 3088 阅读 · 0 评论 -
水平分库分表的关键步骤和技术难点
在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法。本篇中,我们将继续聊聊水平分库分表的一些技巧。分片技术的由来关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量、连接数、处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称原创 2016-11-17 09:42:10 · 16537 阅读 · 1 评论 -
分库分表的几种常见玩法及如何解决跨库查询等问题
在谈论数据库架构和数据库优化的时候,我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是,这些朋友所服务的公司业务量正在(或者即将面临)高速增长,技术方面也面临着一些挑战。让人感到担忧的是,他们系统真的就需要“分库分表”了吗?“分库分表”有那么容易实践吗?为此,笔者整理了分库分表中可能遇到的一些问题,并结合以往经验介绍了对应的解决思路和建议。垂直分表垂直分表在原创 2016-11-17 09:40:20 · 70693 阅读 · 11 评论 -
影响数据库性能的因素
论坛上的数据库爱好者们,对于数据库底层的各种细节,内幕,等待事件,隐藏参数等津津乐道,对于调整好一条SQL语句使之在查询优化器/查询引擎下能高性能运转具有巨大的满足感成功感,仿佛自己掌握了天下最有价值的真理,驾驭了天下最有难度的技术。但对于设计和开发出这个数据库系统的人来说,他们看到此情此景,只好躲在一边偷偷的笑了。那么问题来了,使用别人数据库的人被称为大师(如:OCM),那么自己写出一个数据库来的原创 2016-08-24 21:51:20 · 5007 阅读 · 0 评论 -
APP多版本共存,服务端如何兼容?
小改动或者新加功能的 这种情况,数据库结构和API程序一般是可以兼容多版本的,所以不用强制升级,可以坐到多版本共存。 尽量采用数据库层面新增字段和API的方式,应用程序层面就可以兼容了。当然,API层面也可以部署多个版本来同时提供,但这个不是必须的 但最重要的是数据库层面的表结构那些能够兼容到。 或者: 总结: 数据库层面,尽量采用新增字段,而不是修改字段的原则,避免影响以前的业务。原创 2016-07-02 11:51:32 · 21484 阅读 · 3 评论 -
分布式事务及分布式系统一致性解决方案
在分布式系统中,同时满足“一致性”、“可用性”和“分区容错性”三者是不可能的。分布式系统的事务一致性是一个技术难题,各种解决方案孰优孰劣? 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。 我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDB原创 2016-07-02 10:46:24 · 21108 阅读 · 4 评论 -
也谈阻塞、非阻塞、同步、异步
最近在招聘中,发现不少人对BIO、NIO、AIO等理解非常模糊,觉得有必要写文章来纠正下很多人的误解。 在谈这些之前,非常有必要先介绍下Unix 5种IO模型: 阻塞: 阻塞是最常用的IO模型,默认情况下所有的文件操作都是阻塞的。以套接字编程为例。在进程空间中调用recvfrom,其系统调用直到数据报文到达且被拷贝到应用程序进程的缓存区(或者发生错误)后才返回,期间一直在等待。进程在从调用re原创 2016-01-05 12:27:05 · 4032 阅读 · 3 评论 -
大型网站架构体系的演变(下)
互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。本文上篇将主要介绍大型网站基础架构的扩展,下篇则重点从应用程序的角度去介绍网站架构的扩展和演变。原创 2015-06-07 12:13:01 · 9721 阅读 · 5 评论 -
大型网站架构体系的演变(上)
互联网上有很多关于网站架构的各种分享,有些主要是从运维和基础架构的角度去分析的(堆机器,做集群),太关注技术细节实现,普通的开发人员基本看不太懂。本文上篇将主要介绍大型网站基础架构的扩展,下篇则重点从应用程序的角度去介绍网站架构的扩展和演变。原创 2015-06-07 11:28:38 · 15998 阅读 · 5 评论 -
SOA之基于服务总线的设计
在上文中,主要介绍了SOA的概念,什么叫做“服务”,“服务”应该具备哪些特性。本篇中,我将介绍SOA的一种很常见的设计实践--基于服务总线的设计。基于服务总线的设计基于总线的设计,借鉴了计算机内部硬件组成的设计思想(通过总线传输数据)。在分布式系统中,不同子系统之间需要实现相互通信和远程调用,比较直接的方式就是“点对点”的通信方式,但是这样会暴露出一些很明显的问题:系统之间紧密耦合、配置和引用混乱原创 2015-03-21 16:43:14 · 20922 阅读 · 0 评论 -
SOA是什么
曾今SOA的概念犹如今日“云计算、大数据”一样,被炒得火热,不少企业便纷纷响应,并宣称会拥抱和实施SOA。而事实上,业界出现了两种极端:一种是由于各类文章和书籍关于SOA的描述往往太过抽象,再加上各大厂商的呼吁,使得SOA往往显得“高大上”,令不少企业和架构师们望而却步。第二种恰好相反,有部分人却认为SOA无非是“新瓶装旧酒”。 个人理解,SOA在宏观上确实太复杂,因为它涉及到的不仅仅是技术和架构原创 2015-03-21 16:21:19 · 13430 阅读 · 3 评论 -
B-Tree索引在sqlserver和mysql中的应用
在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实没有真正理解索引,并没有搞清楚索引为什么能加快检索速度,以至于在实践中并不能很好的应用索引。事实上,索引可以说是最廉价而且十分有效一种优化手段。一般而言,设计优良的索引对查询性能优化确实能起到立竿见影的效果。原创 2014-11-23 23:48:50 · 7634 阅读 · 0 评论 -
Tier和Layer
笔者总结了实践中对架构的一些理解,希望能够补充很多初学者对架构认识上的不足,纠正初学者的一些误解。原创 2014-08-17 11:43:43 · 11544 阅读 · 2 评论 -
浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
最近在对CDN进行优化,对浏览器缓存深入研究了一下,记录一下,方便后来者画了一个草图:每个状态的详细说明如下:1、Last-Modified在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记(HttpReponse Header)此文件在服务期端最后被修改的时间,格式类似这样:Last-Modified:Tue, 24转载 2014-07-26 12:42:58 · 2346 阅读 · 1 评论 -
cache策略实现的原理(200、304返回码含义)
什么是cache?定义:浏览器缓存(Browser Caching)是为了加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。cache的作用:1、减少延迟,让你的网站更快,提高用户体验。2、避免网络拥塞,减少请求量,减少输出带宽。 页面内容Cache策略:目前我们业务的JS、css、静态页面文件和图片等资源转载 2014-07-26 12:37:36 · 7136 阅读 · 0 评论 -
大型网站图片服务器架构的演进
在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规划不足,造成后期架构上很难兼容和扩展)。本文将以一个真实垂直门户网站的发展历程,向大家娓娓道来。原创 2014-06-16 21:40:21 · 28718 阅读 · 5 评论 -
分布式缓存那些事儿
在前面的一些文章中,从实战的角度,讲解了有关memcached的应用、容灾、监控等等。但是缺乏对理论的讲解和原理性的剖析。本文将从理论的角度去介绍,让大家从宏观上对“分布式缓存、nosql”等技术有所了解,以便进一步学习和使用。在构建大规模的web应用时,缓存技术可以说是必备的,学习的必要性不言而喻。分布式缓存概述1.1 分布式缓存的特性分布式缓存具有如下特性:1) 高性能:当传统数据库面临大规模原创 2013-06-10 15:17:22 · 39619 阅读 · 4 评论 -
sqlserver性能调优入门篇
相信不少的朋友,无论是做开发、架构的,还是DBA等,都经常听说“调优”这个词。说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼。当然,也有很多人对此不屑一顾,因为并不是每个人接触到的项目都很大,也不是每个人做的项目都对性能要求很高。在主流的企业级开发和互联网应用中,数据库的重要性是不言而喻的,而数据库的性能对于整个系统的性能而言也是至关重要的,这里无庸赘述。sqlserve原创 2013-03-16 23:55:11 · 8447 阅读 · 3 评论 -
“集群和负载均衡”等的通俗解释
在“高并发,海量数据,分布式,NoSql,云计算......”概念满天飞的年代,相信不少朋友都听说过甚至常与人提起“集群,负载均衡”等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了这些“听起来很牛的”技术名词。下面简单解释一下吧。 集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以原创 2012-12-16 20:02:30 · 12383 阅读 · 16 评论 -
关于NoSQL的选型和使用
【内容简介】NoSQL,指的是非关系型的数据库。随着互联网Web 2.0网站的兴起,传统的关系数据库在应付Web 2.0网站时,特别是超大规模和高并发的SNS类型的Web 2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。就像AK47是非洲人的身份证一样,NoSQL技能如今已成为Web开发软件工程师的必备技能之一。【使用NoSQL原创 2012-11-13 15:31:29 · 8783 阅读 · 3 评论 -
RAID在企业服务器中的应用(RAID几种级别)
企业级的数据库应用大多部署在RAID磁盘阵列的服务器上,这样能提高磁盘的访问性能,并能够实现容错/容灾。RAID(冗余磁盘阵列),简单理解,就是拿一些廉价的硬盘来做成阵列。其目的无非是为了扩展存储容量,提升读写性能,实现数据冗余(备份容灾)。就像很早就有老外拿N台旧PC,做成一个强大的“服务器集群”。RAID技术诞生于1987年,由美国加州大学伯克利分校提出。主流的大概可以分为几个级别:RAID原创 2012-09-09 16:55:10 · 25974 阅读 · 7 评论 -
技术普及帖:你刚才在淘宝上买了一件东西
你发现快要过年了,于是想给你的女朋友买一件毛衣,你打开了www.taobao.com。这时你的浏览器首先查询DNS服务器,将www.taobao.com转换成ip地址。不过首先你会发现,你在不同的地区或者不同的网络(电信、联通、移动)的情况下,转换后的IP地址很可能是 不一样的,这首先涉及到负载均衡的第一步,通过DNS解析域名时将你的访问分配到不同的入口,同时尽可能保证你所访问的入口是所有入口中可转载 2012-02-25 15:06:33 · 2317 阅读 · 0 评论 -
sqlserver数据库大型应用解决方案总结
随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。一、负载均衡技术负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服原创 2012-01-04 17:08:14 · 4119 阅读 · 4 评论 -
网站提高速度的13个简易规则
本文为译文,原文地址:http://www.codinghorror.com/blog/2007/08/yslow-yahoos-problems-are-not-your-problems.htmlYSlow: Yahoo's Problems Are Not Your ProblemsI first saw Yahoo's 13 Simple Rules for Speeding Up You翻译 2011-11-11 10:17:58 · 2938 阅读 · 0 评论 -
网站高性能的核心优势该如何打造
导读:本文根据Jeff Atwood的博文《Performance is a Feature》整理编译而来。作者就如何创建高性能网站分享了一些经验。现整理出来与大家分享。很多数据表明,网页打开和下载的速度越慢,用户越不愿使用。从Google搜索中可看出,当页面显示10个答案需要用时0.4秒,而页面出现30个结果需要用时0.9秒,仅仅半秒钟导致下降20%的传输,半秒钟的延迟同时降低了用户的满意度。我翻译 2011-11-11 09:44:06 · 1908 阅读 · 0 评论 -
高性能网站的14个原则
原则1 减少HTTP请求数构造请求、等待响应需要时间,因此请求数量越少越好。减少请求的总体思路就是合并资源,减少显示一个页面需要的文件数。1. Image Map通过设置标签的usemap属性与使用标签可以在一幅图片上切分出多个区域,指向不同的链接。比起使用多幅图片分别构造链接减少了请求数。2. CSS Sprite(CSS贴图整合/贴图拼合/贴图定位)通过设置元素的background-posi转载 2011-10-17 11:26:17 · 2173 阅读 · 0 评论 -
大型网站架构不得不考虑的10个问题
这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面原创 2011-10-15 09:10:28 · 2519 阅读 · 3 评论 -
大型网站架构演变
今天我们来谈谈一个网站一般是如何一步步来构建起系统架构的,虽然我们希望网站一开始就能有一个很好的架构,但马克思告诉我们事物是在发展中不断前进的,网站架构也是随着业务的扩大、用户的需求不断完善的,下面是一个网站架构逐步发展的基本过程,读完后,请思考,你现在在哪个阶段。 架构演变第一步:物理分离WebServer和数据库 最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都转载 2011-10-11 18:29:50 · 6330 阅读 · 2 评论 -
大型网站后台架构的演变
随着用户访问量的不断增加,网站的后台也会不断变化以应对需求。本文主要从一个小型网站到大型网站的过度与变化来陈述。 1.1 网站后台架构 主要指由web server 、应用服务器、数据库、存储、监控等组成的网站后台系统。 1.2 架构演变 个人站点后台架构。如图2-1所示。图2-1 单台一组 如图所示,如果是个人站点,访问量不大,一般都是将web server、应用服务器、数据库部署在一转载 2011-10-11 18:28:09 · 7664 阅读 · 3 评论 -
浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平转载 2011-10-11 18:27:00 · 71243 阅读 · 10 评论