SlideShare a Scribd company logo

Build scalable microblog qcon beijing 2010

T
Tim Y

构建可扩展的微博架构 qcon beijing 2010

1 of 50
Download to read offline
构建可扩展微博架构 Tim Yang 新浪微博 技术架构师
[object Object]
博客 ,[object Object],[object Object],[object Object],[object Object],[object Object]
博客 ,[object Object],[object Object],[object Object],[object Object],[object Object]
微博 ,[object Object],[object Object],[object Object],[object Object]
[object Object]
信息聚合 ,[object Object],[object Object],[object Object]
Push ,[object Object],[object Object],[object Object],[object Object],[object Object]
Push(Figure) User A UpdateAction Inbox (Append to 1’s  home timeline) Inbox (Append to 2’s  home timeline) Inbox (Append to 3’s  home timeline) Followers of User A = 1, 2, 3
Push ,[object Object],[object Object]
Pull ,[object Object],[object Object]
Pull User I Get home_timeline Outbox (statuses sent by A) Outbox (Statuses sent by B) Outbox (Statuses sent by C) User I’s  Following List = A, B, C
Pull ,[object Object],[object Object]
[object Object],[object Object]
[object Object],[object Object]
请求量 ,[object Object],[object Object],[object Object]
IO 瓶颈 ,[object Object],[object Object]
后果 ,[object Object],[object Object],[object Object],[object Object]
异步设计 ,[object Object],[object Object],[object Object]
MQ products ,[object Object],[object Object],[object Object],[object Object]
Memcacheq ,[object Object],[object Object],[object Object],[object Object]
避免单点故障 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
MQ 方式通用的优点 ,[object Object],[object Object],[object Object],[object Object],[object Object]
使用 MQ 原则 ,[object Object]
[object Object]
[object Object]
[object Object],[object Object],http://t.sina.com.cn/pub/star#a_ty
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object]
容量问题 ,[object Object],[object Object],[object Object],[object Object],[object Object]
单点问题 ,[object Object],[object Object],[object Object],[object Object]
Consistent hash ,[object Object],[object Object],[object Object]
Read-through cache
Read-through and Write-through ,[object Object],[object Object],[object Object],[object Object]
Evictions 问题 ,[object Object],[object Object],[object Object]
如何避免 evictions ,[object Object],[object Object],[object Object]
Multiget 问题 ,[object Object],[object Object]
Cache 挑战: multiget hole
解决方法 ,[object Object]
[object Object]
[object Object],[object Object]
地理分布 ,[object Object],[object Object],[object Object],[object Object],[object Object]
数据地理分布原理 ,[object Object],[object Object],[object Object],[object Object],[object Object]
地理分布的方案 ,[object Object],[object Object],[object Object]
[object Object]
以新浪微博开放平台为例 ,[object Object],[object Object],[object Object],[object Object],[object Object]
解决方案: Sina App Engine ,[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]

Recommended

大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)Tim Y
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统
Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统Dahui Feng
 
张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析Leechael
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题XiaoJun Hong
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 

More Related Content

What's hot

分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化XiaoJun Hong
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3redhat9
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面Tianwei Liu
 
Hbase架构简介、实践
Hbase架构简介、实践Hbase架构简介、实践
Hbase架构简介、实践Li Map
 
快速搭建高性能服务端
快速搭建高性能服务端快速搭建高性能服务端
快速搭建高性能服务端moonbingbing
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0qianshi
 
了解集群
了解集群了解集群
了解集群Feng Yu
 
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版XiaoJun Hong
 

What's hot (18)

java title
java titlejava title
java title
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化大型系统的缓存标准化之路—从主从多级重client到一体化
大型系统的缓存标准化之路—从主从多级重client到一体化
 
MassTransit
MassTransitMassTransit
MassTransit
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
Hbase架构简介、实践
Hbase架构简介、实践Hbase架构简介、实践
Hbase架构简介、实践
 
快速搭建高性能服务端
快速搭建高性能服务端快速搭建高性能服务端
快速搭建高性能服务端
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0Traffic server 管理员指南v1.0
Traffic server 管理员指南v1.0
 
了解集群
了解集群了解集群
了解集群
 
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版
 

Viewers also liked

微博cache设计谈
微博cache设计谈微博cache设计谈
微博cache设计谈Tim Y
 
High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011Tim Y
 
微博架构与平台安全
微博架构与平台安全微博架构与平台安全
微博架构与平台安全Tim Y
 
互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践XiaoJun Hong
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化XiaoJun Hong
 
大规模数据库存储方案
大规模数据库存储方案大规模数据库存储方案
大规模数据库存储方案XiaoJun Hong
 
Data Storage Practice
Data Storage PracticeData Storage Practice
Data Storage PracticeDavies Liu
 
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析isnull
 
豆瓣技术架构的发展历程 @ QCon Beijing 2009
豆瓣技术架构的发展历程 @ QCon Beijing 2009豆瓣技术架构的发展历程 @ QCon Beijing 2009
豆瓣技术架构的发展历程 @ QCon Beijing 2009Qiangning Hong
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查bluedavy lin
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Feng Yu
 
Scaling MySQL in Amazon Web Services
Scaling MySQL in Amazon Web ServicesScaling MySQL in Amazon Web Services
Scaling MySQL in Amazon Web ServicesLaine Campbell
 
基于AWS Lambda的无服务器架构在Strikingly中的应用
基于AWS Lambda的无服务器架构在Strikingly中的应用基于AWS Lambda的无服务器架构在Strikingly中的应用
基于AWS Lambda的无服务器架构在Strikingly中的应用Daniel Gong
 
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップTaichi Furuhashi
 
20140530 esri japan GIS User Conference 2014
20140530 esri japan GIS User Conference 201420140530 esri japan GIS User Conference 2014
20140530 esri japan GIS User Conference 2014Taichi Furuhashi
 
Flexible Robotic Manipulation
Flexible Robotic ManipulationFlexible Robotic Manipulation
Flexible Robotic ManipulationSamuel Bouchard
 
Order of Operations
Order of OperationsOrder of Operations
Order of Operationsmradcliffe
 
A Snapshot On Modern Advertising
A Snapshot On Modern AdvertisingA Snapshot On Modern Advertising
A Snapshot On Modern AdvertisingJustice Mitchell
 
20111001 how2 usepotlatch2
20111001 how2 usepotlatch220111001 how2 usepotlatch2
20111001 how2 usepotlatch2Taichi Furuhashi
 

Viewers also liked (20)

微博cache设计谈
微博cache设计谈微博cache设计谈
微博cache设计谈
 
High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011
 
微博架构与平台安全
微博架构与平台安全微博架构与平台安全
微博架构与平台安全
 
互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践互联网系统的稳定性保证:微博的实践
互联网系统的稳定性保证:微博的实践
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化
 
大规模数据库存储方案
大规模数据库存储方案大规模数据库存储方案
大规模数据库存储方案
 
Data Storage Practice
Data Storage PracticeData Storage Practice
Data Storage Practice
 
人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析人人网技术经理张铁安 Feed系统结构浅析
人人网技术经理张铁安 Feed系统结构浅析
 
豆瓣技术架构的发展历程 @ QCon Beijing 2009
豆瓣技术架构的发展历程 @ QCon Beijing 2009豆瓣技术架构的发展历程 @ QCon Beijing 2009
豆瓣技术架构的发展历程 @ QCon Beijing 2009
 
Java常见问题排查
Java常见问题排查Java常见问题排查
Java常见问题排查
 
Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言Erlang分布式系统的的领域语言
Erlang分布式系统的的领域语言
 
Scaling MySQL in Amazon Web Services
Scaling MySQL in Amazon Web ServicesScaling MySQL in Amazon Web Services
Scaling MySQL in Amazon Web Services
 
基于AWS Lambda的无服务器架构在Strikingly中的应用
基于AWS Lambda的无服务器架构在Strikingly中的应用基于AWS Lambda的无服务器架构在Strikingly中的应用
基于AWS Lambda的无服务器架构在Strikingly中的应用
 
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ
20141022 ユビキタスとオープン_10周年を迎えたオープンストリートマップが目指す次世代マップ
 
20140530 esri japan GIS User Conference 2014
20140530 esri japan GIS User Conference 201420140530 esri japan GIS User Conference 2014
20140530 esri japan GIS User Conference 2014
 
Flexible Robotic Manipulation
Flexible Robotic ManipulationFlexible Robotic Manipulation
Flexible Robotic Manipulation
 
Order of Operations
Order of OperationsOrder of Operations
Order of Operations
 
A Snapshot On Modern Advertising
A Snapshot On Modern AdvertisingA Snapshot On Modern Advertising
A Snapshot On Modern Advertising
 
Miguli Basic
Miguli BasicMiguli Basic
Miguli Basic
 
20111001 how2 usepotlatch2
20111001 how2 usepotlatch220111001 how2 usepotlatch2
20111001 how2 usepotlatch2
 

Similar to Build scalable microblog qcon beijing 2010

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统lonegunman
 
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)LetAgileFly
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践mysqlops
 
PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅Yi Sun
 
2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbitthinkinlamp
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)JoXuZi
 
做一个“懒惰”的程序员-LCP框架系列交流
做一个“懒惰”的程序员-LCP框架系列交流做一个“懒惰”的程序员-LCP框架系列交流
做一个“懒惰”的程序员-LCP框架系列交流lichengdongdong
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168vanadies10
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构n716
 
Think php官方视频之入门篇【幻灯片】
Think php官方视频之入门篇【幻灯片】Think php官方视频之入门篇【幻灯片】
Think php官方视频之入门篇【幻灯片】luofei614
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijingdrewz lin
 
Key value store
Key value storeKey value store
Key value storexuanhan863
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事Yihua Huang
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicecong lei
 

Similar to Build scalable microblog qcon beijing 2010 (20)

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 shanghai  精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 shanghai 精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅
 
Cdc@ganji.com
Cdc@ganji.comCdc@ganji.com
Cdc@ganji.com
 
2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit2011 06-12-why do we need the rabbit
2011 06-12-why do we need the rabbit
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
做一个“懒惰”的程序员-LCP框架系列交流
做一个“懒惰”的程序员-LCP框架系列交流做一个“懒惰”的程序员-LCP框架系列交流
做一个“懒惰”的程序员-LCP框架系列交流
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168
 
Aswan&hump
Aswan&humpAswan&hump
Aswan&hump
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
Think php官方视频之入门篇【幻灯片】
Think php官方视频之入门篇【幻灯片】Think php官方视频之入门篇【幻灯片】
Think php官方视频之入门篇【幻灯片】
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
微博架构Ppt
微博架构Ppt微博架构Ppt
微博架构Ppt
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
Key value store
Key value storeKey value store
Key value store
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事
 
deep inside Sina App Engine cloud service
deep inside Sina App Engine cloud servicedeep inside Sina App Engine cloud service
deep inside Sina App Engine cloud service
 
Sae
SaeSae
Sae
 

Build scalable microblog qcon beijing 2010

  • 1. 构建可扩展微博架构 Tim Yang 新浪微博 技术架构师
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Push(Figure) User A UpdateAction Inbox (Append to 1’s home timeline) Inbox (Append to 2’s home timeline) Inbox (Append to 3’s home timeline) Followers of User A = 1, 2, 3
  • 10.
  • 11.
  • 12. Pull User I Get home_timeline Outbox (statuses sent by A) Outbox (Statuses sent by B) Outbox (Statuses sent by C) User I’s Following List = A, B, C
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 35.
  • 36.
  • 37.
  • 38.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.