Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The design of scalable architecture
Search
Bruce Dou
May 26, 2013
Technology
4.8k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The design of scalable architecture
关于产品架构和 Web 后端架构设计
Bruce Dou
May 26, 2013
More Decks by Bruce Dou
See All by Bruce Dou
Coroutine Based Concurrency with PHP and Swoole
doubaokun
3
4.5k
Preemptive multitasking using coroutines in PHP Swoole
doubaokun
0
310
Asynchronous programming with PHP
doubaokun
1
13k
High available Message Queue: RabbitMQ
doubaokun
4
3.1k
Other Decks in Technology
See All in Technology
Mastering Ruby Box
tagomoris
3
150
新アーキテクチャ「TiDB X」解説とDedicated比較 TiDB Cloud Premiumのゲーム運用活用を検証
staffrecruiter
0
110
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
AI と創る新たな世界 / A New World Created with AI
ks91
PRO
0
110
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
140
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
110
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
850
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
210
運用を見据えたAIエージェント設計実践
amacbee
1
2.8k
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
500
Sony_KMP_Journey_KotlinConf2026
sony
2
210
EventBridge Connection
_kensh
4
510
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Curious Case for Waylosing
cassininazir
1
370
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
420
A Soul's Torment
seathinner
6
2.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
240
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
How to train your dragon (web standard)
notwaldorf
97
6.7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
220
Exploring anti-patterns in Rails
aemeredith
3
390
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
830
Transcript
可扩展的架构设计 关于产品架构和 Web 后端架构 Bruce Dou May, 2013 可扩展的架构设计 http://blog.eood.cn
http://t.cn/zHxOsAx
关于我 • 语⾔言控:PHP、JavaScript(Node.js)、Java、Ruby、Python、Erlang、C • 原理控:对系统内部的细节感兴趣 • 新技术发烧友:关注开源项⺫⽬目 • 关注前端架构:HTML5、Backbone.js、⾃自动化部署 •
关注应⽤用层框架:Drupal、Ruby on Rails、Django、Express.js • 关注数据库:MySQL、Redis、MC、MongoDB • 其他关注点:产品设计、UX、分布式、HA、⾃自动化运维 Github: http://github.com/doubaokun Twitter: @chinadrupaller Weibo: @Erlang Email:
[email protected]
Blog: http://blog.eood.cn/ 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
分享内容⼤大纲 • 什么是架构,宏观和微观架构 • 架构的本质和存在的价值 • 架构实施和优化的普适⽅方法 • 可扩展的产品架构 •
可扩展的 Web 后端架构 • 如何实现可扩展的 Web 后端架构 • 流⾏行的 Web 架构模式和开源模块 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
什么是架构,宏观和微观架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
⼈人们常谈论到的架构 • 信息架构 • 产品架构 • Web 架构:前端架构、后端架构 • 团队架构
• 等等 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
⼈人们常谈论到的架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
我理解的架构 架构是规划、选择、组织、组合、优化 (⻓长期的 A/B testing、迭代的过程) 宏观架构:总体规划,⽐比如,产品线的定义 微观架构:具体的实现⽅方式 今天只讨论微观产品架构、Web 后端架构 可扩展的架构设计
http://blog.eood.cn http://t.cn/zHxOsAx
⼤大家都熟悉的架构活动 编程开发活动可以看做是⼀一种微观架构设计 该使⽤用内存还是⽂文件系统还是⺴⽹网络, 需要权衡成本、执⾏行性能、 延时各个⽅方⾯面。 类、函数、对象、⽅方法如何组织才能减少重复性⼯工作、适应需 求变化。 产品策划和设计活动也可以看做是⼀一种架构设计 该使⽤用什么样的布局、什么样的配⾊色组合, ⼤大量的信息如何合理
得传递给⽤用户,主次的区分。 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
题外:每个程序员都应该知道的延迟数 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构的本质和存在的价值 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构的本质和存在价值 对于组织来说 1 降低⻓长期成本(中⻓长期的优化) 2 降低⻛风险(可增减、可预期) 3 适应市场、业务、⽤用户的增⻓长 对于组织个体来说 1
⼈人员活动更⾼高效 (⽂文档化,摩擦更少、沟通耗费的时间更少、对 业务理解更⼀一致) 2 提⾼高⽣生产⼒力 3 少加班、更多的⾃自由时间学习新东⻄西提⾼高综合能⼒力 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构实施和优化的普适⽅方法 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构实施和优化的普适⽅方法 架构是⼀一个不断衡量 ROI、做选择、决策、预测、实施、测试, 迭代试错的过程 可维护、并⾏行、分层、分区、隔离、 冗余、备份、重⽤用、可测、可伸缩、 可通信、监控、平衡、互补、异步、 缓冲、缓存、故障检测、⾃自恢复、重 试、限流、分布式决策、虚拟化、⾃自 动化、⾃自竞争
可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的产品架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的微观产品架构 适应⽤用户群体的增⻓长(男⼈人、⼥女⼈人、其他/⾃自购、送⼈人、代购/ ⽼老⼈人、⼩小孩/Web、Mobile) (KISS) 视觉感受(⻚页⾯面横向宽度的限制,纵向是可扩展的) 分⻚页是⼀一 种可扩展的例⼦子、视觉组合(Spaces) 使⽤用体验(⼀一致性的响应时间、⼀一致性的查找⺫⽬目标的成本) 适应功能的持续添加和删减(要求更⾼高) (结构尽量松耦合)
弹性伸缩,可增可减 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的微观产品架构的⼀一些例⼦子和实践 List 可增⻓长 1-N Menu 可增⻓长 1-N 松耦合和留空⽩白,任何⼀一个部件都应该是可有可⽆无的,任何 ⼀一个组件都应该有存在的原因(Cool不是原因) 简化意味着更强的适应性
衡量ROI,使⽤用⽤用户已经熟悉的控件和⾏行为模式 激励反馈模式 ⽤用户群体的增⻓长和划分 可以不断加减功能 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的Web后端架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的 Web 架构 运维很轻松: ⾃自动化、进程当了会⾃自动补充、机器当了会⾃自 动切换到备机、可以回头处理故障、有更充裕的时间 运营想促销就促销: 发红包不⽤用考虑技术问题 产品的需求都能实现:(实时性的需求)、想要什么功能都能 实现、局限更少
开发⼈人员很 Happy: 更多的重⽤用、少了很多重复性的⼯工作、 对⾃自⼰己的领域可以研究得更深⼊入(职业发展) Boss 很 Happy: ⺴⽹网站不停机不当机(每个部件故障或者消 失、被隔离都不影响整体运作) 弹性架构、⾃自动根据业务量⽤用户量增加减少机器、进程、各个组 件。 服务各司其职、不需要了解完整的业务、只需要了解接⼝口、⿊黑盒 抽象、隔离忧虑。 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 后端架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
Web 架构扩展的 2 种⽅方式 Scaling up: Better machine, but expensive
Scaling out: More cheap machines,open source, no licence fee 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (1) 通过接⼝口和协议沟通 (不需要了解内部实现⽅方式、只需要了解实现了什 么)(降低通信消耗) 松耦合: 意味着可以实现更⾼高的性能(可以只优化瓶颈) 切忌以某个组件为
中⼼心的模式,⽐比如以数据库为中⼼心的架构 SOA 每个组件提供⼀一种服务,服务直接通过接⼝口和协议进⾏行通信 服务保证 SLA 单⼀一服务性能可测、整体⽀支撑性能可测并且可预测 (祈祷 撑得住是⼀一种⾼高⻛风险的做法) 同样服务有多个实例、之间互为冗余、互为备份 (服务性能可测) 服务可以分级, 集中优化瓶颈实现更⾼高整体性能 服务可以重⽤用、减少了⼯工作量 服务更容易测试、运维、部署、分版本、迭代开发、测量性能、跟踪⽇日 志 可以区分实时性需求和不需要实时性的需求,异步处理⾮非实时性需求 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (2) 单⼀一的服务更容易开发,不需要考虑太多牵扯的内容。开发⼈人员的实现 ⽅方式可以更深⼊入、减少了⼯工作量。 可以实现异构、使⽤用任何语⾔言、任何框架 服务之间可以隔离、当的也许只是⼀一个不重要的服务,减少了整体损 失。不重要的服务在特性情况下可以关闭。 服务部件可替换:性能不好、语⾔言不爽、有了更好的开源产品
核⼼心数据库承担尽量少的⼯工作、并且做 Sharding (⼒力⽓气再⼤大的⽜牛所拉⻋车的 重量也是有限的,CPU 主频达到极限) 服务⽆无状态和状态的中⼼心化 分层次 (例⼦子:Router App Cache MQ DB) 分区域 (例⼦子: Sharding、业务的拆分) Naming service (虚拟化) ⾃自动化、分布式、开源 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
流⾏行的 Web 架构模式和开源模块 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
流⾏行的 Web 架构模式 Client-Server、Browser-Server Database-centric: (Most small website) ESB (Enterprise
Service Bus) Event Driven and Async:(Most GUI、Most Proxy) Message Queue、Task Queue SOA:RESTful、SOAP、XMLRPC、Thrift P2P Share nothing (Stateless) Layered (分层) Map-Reduce 数据库的 Sharding、Router 数据库的 Master-Slave、Replica ⼤大前端 (包括了服务端渲染和浏览器端渲染) 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
Web 架构中常⻅见的开源模块 分布式协同: Zookeeper 负载均衡: LVS(Layer 4), HAProxy(Layer 4、 7),
Nginx(Layer 7) 虚拟化: LXC、KVM、Xen HA:Keepalived、Heartbeat 分布式缓存: Memcache, Redis 消息队列: 0MQ, Beanstalkd、Gearman、etc 监控和⾃自恢复⼯工具: Supervised, Monit, Forever, etc Storage RDMS:MySQL、Postgres Storage K-V DB: MySQL(handlersocket)、Redis、Hbase、LevelDB、 Riak、S3 Internal DNS:dnsmasq 集中 Logging、图表:Logstash、Graphite 压测⼯工具:Tcpcopy、EM-Proxy、Seige、Tsung 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
⼀一些有⽤用的链接 • http://ggatz.com/images/Enterprise_20Integration_20-_20SOA_20vs_20EAI_20vs_20ESB.pdf • http://www.slideshare.net/erichleipold/SOA-ESB-Presentation • http://jasonwilder.com/blog/2012/01/03/centralized-logging/ • https://code.google.com/p/tcpcopy/ •
https://github.com/igrigorik/em-proxy • http://zookeeper.apache.org/ • http://www.linuxvirtualserver.org/ • http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/ • http://tsung.erlang-projects.org/ • http://code.google.com/p/leveldb/ 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
Q & A 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx