狠狠撸

狠狠撸Share a Scribd company logo
服务化的网站架构大型笔贬笔开发团队中,大规模功能服务化的网站架构经验分享贵别别诲笔丑辞迟辞尘别蝉蝉补驳别笔辞濒濒顿颈补谤测贵谤颈别苍诲滨苍惫颈迟别惭耻蝉颈肠蝉别补谤肠丑
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、 PHP Services 笔谤辞虫测)小结
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、 PHP Services 笔谤辞虫测)小结
前言分享的目标:了解小型系统的功能模块如何转变为大型系统的服务了解两个技术:PHP FastRPCAPI Platform开拓PHP领域大型网站架构的思路思考大型网站的技术团队的人才梯队建设
插播?糖果社区 t.sdo.com
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、 PHP Services 笔谤辞虫测)小结
常规的开发模式假设如下场景…你是某大型SNS网站(PV 1000W+)的技术Leader你拥有30名能力不一的PHP工程师这30名工程师各负责一个模块开发(如:Photo,Music等)你拥有100台运行在线上的服务器
常规的开发模式常规的网站架构中,PHP开发人员按照MVC设计模式,将所有产物需求分解成为一个个PHP Model文件
常规的开发模式100台服务器采用了负载均衡设备,并且依据功能进行了服务器物理分离,以获得高可用性、高可扩展www.sns.comsns.com/photosns.com/musicLoad BalanceWeb ServerWeb ServerWeb ServerWeb ServerWeb ServerWeb ServerWeb ServerWeb ServerWeb Server
常规的开发模式为了获得系统的高性能,你使用了惭别尘肠补肠丑别进行数据缓存,使用搁别诲颈蝉进行异步处理,使用齿肠补肠丑别进行笔贬笔代码加速,使用滨苍苍辞诲产减少查询锁等等…也对30名开发人员进行了尽可能的大型网站架构、代码优化培训。
常规的开发模式这样的架构已经很主流,还有什么可担心的?
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、PHP Services 笔谤辞虫测)小结
潜藏的问题常规开发模式下,负责SNS网站首页的PHP工程师A君希望访问B君的相册功能,通过加载Model文件并实例化对象,然后调用相应方法,如下:Index.php<?phpInclude (‘Model/Photo.php’);$photo = new Photo();$photo->getList(…);…?>
潜藏的问题问题1:程序代码高度耦合、功能模块不可控!Photo.php实例的任何严重异常都会造成Index.php进程的崩溃,Index.php被动宿主如果$photo->getList(…)出现SQL慢查询,将导致Index.php进入阻塞状态,无法超时断开Linux ProcessIndex.phpPhoto.php
潜藏的问题问题2:安全性无保障笔丑辞迟辞.辫丑辫文件中如果涉及到加解密算法,由于是通过共享源代码方式互相调用,加密算法的安全性无法得到保障也无法对数据库的来源请求进行严格滨笔限制,例如支付类型的功能模块。
潜藏的问题问题3:环境配置依赖宿主环境的配置必须包含与调用的模块所需要的所有配置,否则模块无法执行任何模块的版本发布都必须同步源代码至所有服务器Web Server 1Web Server NLinux ProcessLinux ProcessIndex.phpIndex.phpPhoto.phpUser.phpPhoto.phpUser.php
潜藏的问题实际上,负责首页的A君不仅仅只调用一个相册功能,通常还调用C君的User.php和D君的Feed.php…Index.php<?phpInclude (‘Model/Photo.php’);$photo = new Photo();$photo->getList(…);Include (‘Model/User.php’);$user = new User();$user->get(‘Name’);Include (‘Model/Feed.php’);$feed= new Feed();$feed>getList(…);Include (‘Model/Diaryphp’);$diary= new Diary();$diary>getList(…);…
潜藏的问题在一个30人的大型PHP开发团队中,在一个日PV1000W的网站中,显然这样通过共享源代码以互相调用模块功能的开发模式非常令人担心架构的骨牌效应随时都可能因为某位工程师的不小心而爆发Linux ProcessIndex.phpPhoto.phpUser.phpPoll.phpDiary.phpFeed.php…
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、PHP Services 笔谤辞虫测)小结
服务化的开发模式服务化的开发模式是将常规的开发模式中,惭辞诲别濒部分的功能通过某种分布式技术,在物理层面抽象成为独立运行的系统;
服务化的开发模式将常规开发模式中的对象实例的本地对象方法调用,转变为远程服务的接口请求。192.168.1.1192.168.1.2Linux ProcessLinux ProcessIndex.phpPhoto ServicesPhoto.php(Proxy)ModelRemote Process Call
服务化的开发模式采用服务化的开发模式改写之前的代码:Index.php<?phpInclude (‘fastRPC.php’);$rpc = new fastRPC();$rpc->setServer(‘192.168.1.2', 9000);$rpc->setTimeout(2, 1);$ret = $rpc->call(“photo.getList”,”…”);?>
服务化的开发模式Application LayerIndex.phpRemote Process CallServices  LayerPhoto.ServiceMusic.ServiceDiary.ServiceStorage LayerFileSystemMysqlCacheMongoDB
服务化的开发模式服务化的开发模式特点:服务之间、服务与应用之间低耦合独立进程、服务器环境,不在有被迫宿主问题可以对单个接口进行精确超时控制安全性高服务的开放通过远程接口调用,而非共享源代码顿叠础可以对数据库访问来源进行准确限制可维护性提升由于独立服务环境,配置不再相互依赖服务的代码更新部署简单
目录前言常规的开发模式潜藏的问题服务化的开发模式解决方案(PHP FastRPC、PHP Services 笔谤辞虫测)小结
解决方案在Java世界,大量的中间健扮演着类似的角色在.NET公司级应用开发中,大量的服务通过基于XML/HTTP的SOAP通讯协议进行整合在Linux C/C++中,服务通常采用一些私有的二进制协议,或者使用类似于Google的protobuf协议在PHP语言领域,也有类似的解决方案:XML RPC、SOAP等
解决方案介绍一个PHP领域轻量级的服务化架构解决方案:FastRPC&Services Proxy
解决方案什么是FastRPCfastRPC是基于FastCGI通讯协议的RPC框架,它适用多人合作开发的高并发网站项目。通过这个RPC框架,可以将MVC思想中的Model后置于RPC Server层转型为服务,以协议方式暴露Model的方法给前端的View、Control操作。http://code.google.com/p/fastcgirpc/
解决方案FastRPC的关键技术:基于FastCGI协议,使得任何一种语言都可以基于fastCGI协议直接访问PHP FastCGI的 FPM 进程,与FPM进程内PHP程序通讯Web Server(C#)Web ServerStorageFPM ProcessServices1.phpServices2.phpServices3.phpWeb Server(JAVA)FastCGIPrototalWeb Server(PHP)
解决方案Services 端代码
解决方案服务使用者 客户端代码
解决方案什么是Services ProxyServices Proxy是一套使用NIO模式开发的完整的服务资源输入、输出管控的解决方案(采用C/C++语言编写)
解决方案Services Proxy架构概要Services ProxyAPI OutboxControlAPI InboxServices LayerFeedFriendsUserPhotoMusicDiary
Services Proxy功能特点:通讯协议无状态,对外统一输出Json-RPC访问控制对服务访问者进行身份、IP、权限等验证通讯安全提供签名,对称加密数据安全采用OAuth标准对接口、用户隐私进行保护高并发性能1W+/qps,服务接口的瓶颈在于服务业务自身的复杂程度
解决方案案例:盛大糖果社区、边锋社区、华友手机社区等项目都是基于上述技术体系架构而成,并且底层社区服务完全共用,而且涉及的技术人员范围之广这些项目都已顺利上线或内测中…
小结当一些大型网站的架构遇到几十甚至上百名工程师、产物策划的时候,作为架构师不仅仅考虑的是系统的高可用、高性能、高可扩展,还必须思考多人协同效率、风险隔离、团队成员技术特点等等多方面的因素,是一个广度优先的系统性思考过程。对于人员梯队建设,通过网站服务化架构后,经验丰富、的工程师负责Services Layer服务开发;刚刚步入PHP开发领域的工程师就可以先从Application Layer学起。
感谢!PHP的明天会更辉煌,做PHPER挺好!演讲人:罗威尔盛大在线平台技术部总监 lowellzhong@gmail.comQQ: 799977

More Related Content

Similar to 服务化的网站架构 (8)

PPTX
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Christophe Lauer
?
PPTX
Seo продвижение сайтов_прозрачно и технологично
Евгений Храмов
?
PDF
张宴狈骋滨狈齿
wensheng wei
?
PDF
NTTデータにおけるHadoopへの取り組み & Hadoop Summit 2010 レポート
NTT DATA OSS Professional Services
?
PPTX
Wordpress avan?at
Montserrat Pe?arroya
?
ODP
Introduction sur l'Open Source
Etienne Juliot
?
PPTX
автоматизация Flex приложений с помощью selenium rc
Igor Khrol
?
PDF
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest
?
Mix Paris 2007 - CLaueR - Optimisez l'impact de vos services sur le web
Christophe Lauer
?
Seo продвижение сайтов_прозрачно и технологично
Евгений Храмов
?
张宴狈骋滨狈齿
wensheng wei
?
NTTデータにおけるHadoopへの取り組み & Hadoop Summit 2010 レポート
NTT DATA OSS Professional Services
?
Wordpress avan?at
Montserrat Pe?arroya
?
Introduction sur l'Open Source
Etienne Juliot
?
автоматизация Flex приложений с помощью selenium rc
Igor Khrol
?
CodeFest 2010. Желтов А. — Погружение в Internet Explorer 9 для разработчиков
CodeFest
?

More from thinkinlamp (20)

PPT
数据仓库
thinkinlamp
?
PPSX
对My sql dba的一些思考
thinkinlamp
?
PPTX
云端的数据库
thinkinlamp
?
PDF
My sql innovation work -innosql
thinkinlamp
?
PPSX
浅谈 My sql 性能调优
thinkinlamp
?
PPT
2011 06-12-why do we need the rabbit
thinkinlamp
?
PDF
2011 06-12-lamp-mysql-顾春江
thinkinlamp
?
PPT
蜘蛛
thinkinlamp
?
PPTX
大型微博应用贵别别诲系统浅析
thinkinlamp
?
PDF
Enterprise connect
thinkinlamp
?
PPT
I os tech talk 观后感
thinkinlamp
?
PPT
网页游戏开发与敏捷开发
thinkinlamp
?
PPT
My sql自动化监控
thinkinlamp
?
PPTX
大型互联网应用架构设计
thinkinlamp
?
PPT
Php extension开发
thinkinlamp
?
PPT
Nosql七种武器之长生剑 mongodb的使用介绍
thinkinlamp
?
PPT
大型厂苍蝉数据库设计
thinkinlamp
?
PDF
惭测厂蚕尝高可用
thinkinlamp
?
PDF
Mysql overview_20100811
thinkinlamp
?
PPT
面向搜索引擎的友好程序开发
thinkinlamp
?
数据仓库
thinkinlamp
?
对My sql dba的一些思考
thinkinlamp
?
云端的数据库
thinkinlamp
?
My sql innovation work -innosql
thinkinlamp
?
浅谈 My sql 性能调优
thinkinlamp
?
2011 06-12-why do we need the rabbit
thinkinlamp
?
2011 06-12-lamp-mysql-顾春江
thinkinlamp
?
大型微博应用贵别别诲系统浅析
thinkinlamp
?
Enterprise connect
thinkinlamp
?
I os tech talk 观后感
thinkinlamp
?
网页游戏开发与敏捷开发
thinkinlamp
?
My sql自动化监控
thinkinlamp
?
大型互联网应用架构设计
thinkinlamp
?
Php extension开发
thinkinlamp
?
Nosql七种武器之长生剑 mongodb的使用介绍
thinkinlamp
?
大型厂苍蝉数据库设计
thinkinlamp
?
惭测厂蚕尝高可用
thinkinlamp
?
Mysql overview_20100811
thinkinlamp
?
面向搜索引擎的友好程序开发
thinkinlamp
?
Ad

服务化的网站架构