王治:用Scala构建19楼社区.pdf

上传人:yyf 文档编号:3334531 上传时间:2019-08-13 格式:PDF 页数:25 大小:781.19KB
返回 下载 相关 举报
王治:用Scala构建19楼社区.pdf_第1页
第1页 / 共25页
王治:用Scala构建19楼社区.pdf_第2页
第2页 / 共25页
王治:用Scala构建19楼社区.pdf_第3页
第3页 / 共25页
王治:用Scala构建19楼社区.pdf_第4页
第4页 / 共25页
王治:用Scala构建19楼社区.pdf_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《王治:用Scala构建19楼社区.pdf》由会员分享,可在线阅读,更多相关《王治:用Scala构建19楼社区.pdf(25页珍藏版)》请在三一文库上搜索。

1、用用ScalaScala构建构建1919楼社区楼社区 2013-8 王治 19楼论坛于2002年上线,开始只是都市 快报几位编辑用于和网友交流的平台。杭州 十九楼网络股份有限公司创建于2006年10月。 目前,19楼拥有3576万注册用户,日均页面 访问量达3714万,每日独立访问用户达412 万人次。 概况概况 到2008年底,日均PV已经达到600W 问题: 访问越来越慢 经常宕机 产品功能改进非常困难。 使用使用DiscuzDiscuz 对Discuz进行部分的改造: 剥离数据访问层 按论坛板块分库分表 使用缓存 开发了新产品:我家(SNS)、品牌空间等。 第一次重构第一次重构 2010

2、2010年的架构图年的架构图 前端展现层(基本沿用Discuz代码) 数据访问层(负责数据访问路由) 用户数据版块数据1板块数据2 应用数据 Cache 面临问题面临问题 一、数据是按板块切分的,但部分热门板块单板数据过亿。 开发历史库功能,超过500页的数据归入历史 库。 二、前端业务代码混了。 用Yii框架重写,有所改进。 三、数据库连接不稳定。 面临问题面临问题 三、业务拓展,需要支持其它城市站独立运营 除原有杭州站外,其它城市站采用子板块的方式, 如台州站、宁波站、温州站等。 四、收购的网站需要整合 收购了上海人、重庆购物狂、福州家园等网站, 分别采用Discuz(版本不同),PHPW

3、ind。 1、支持更大的单板论坛数据量和访问量 2、标准化的本地生活社区产品,可以按城市站独立运营 3、用户数据打通 4、可以按行业垂直扩展 5、安全、运维等服务统一提供 设计目标设计目标 1、PHP 2、Python 3、Java 4、Scala 开发语言选择开发语言选择 1、和Java的兼容性 2、更具表现力的语法 3、Actor 4、对新技术的冲动 选择选择ScalaScala的理由的理由 最初项目组只有4个人,都是Java工程 师背景。项目前对Scala安排学习,但没有 实践经验。项目开始后直接边做边学。 后期加入的成员安排2周左右培训和代 码学习。 开发团队开发团队 项目完成后按城市

4、站逐步上线,先从访问 量比较小的城市站开始迁移。 核心部分用Java开发。 采用iBatis+Spring+SpringMVC等Java框架 风险控制风险控制 改造后的架构改造后的架构 DB1DB2DB3 DB256 帖子数据库 按TID Hash DB1 City2 DB1 City1 DBn DB APP DB1 DBn 用户库 用户中心重庆杭州花坛 DB APP 好店 MongoDB Search Feed Cache Storage 使用使用ScalaScala的好处的好处 1、代码更加简洁、高效 2、Actor 3、可以使用Java类库 SetupController: ModelA

5、ndView setup(HttpServletRequest req, ModelAndView mav) handle(req,mav); ModelAndView doHandler(HttpServletRequest req, HttpServletResponse resp) RequestWrapper reqWrapper=new ReqeustWrapper(req); mav.setViewName(“standard/user/setup“); mav.addObject(“user“, reqWrapper); return mav; Java CodeJava Cod

6、e BaseController: ModelAndView handle(HttpServletRequest req, ModelAndView mav) RequestWrapper reqWrapper=new ReqeustWrapper(req); if (reqWrapper.isValidUser() doHandler(req,mav); else return redirect(“/login“); abstract ModelAndView doHandle(HttpServletRequest req, ModelAndView mav); Java CodeJava

7、Code BaseController: def handle(req)(closure:Int= int) req.validUser match case Some(user)= closure(user) case None= redirect “/login” SetupController: def setup(req: HttpServletRequest,mav: ModelAndView) = handle(req) user= mav.setViewName(“standard/user/setup”) mav.addObject(“user“, user) ScalaSca

8、la Code Code Implicit def requestWrapperHelper(req:HttpRequest) =new RequestWrapper(req) ScalaScala Code Code 隐式转换: 其它常见的隐式转换: for ( i b, c - d) 发送邮件: val sendMailActor = actor loop react case (mail:Mail) = sendMail(mail) sendMailActor!(myMail) ActorActor Option1Option2 list map (_*2)list.map( i =i

9、*2) a+ba.+(b) (0 /: list)_+_list.foldLeft(0)(begin,i)= begin+i func1(a).func2.(b).func3()func1 a func2 b func3 def foo(a:Int)(func: (Int,Int)=Int)def foo(a:Int, func(Int,Int)= Int) def func(str:String)=def func(str:String) 多种表达方式多种表达方式 val names:ListString=List() var result:String=null for ( name if

10、 isMyName(name) name else searchName(rNames) case _ = null val result= search(names) val names:ListString=List() var result:String=null var flag=true for ( name - names if flag) if (isMyName(name) result=name flag=false 编译慢 适当的拆分jar包,避免一次编译代码过多 缺点缺点 IDE不成熟 目前已经好很多 版本变化比较快,不完全兼容 2.7-2.8到升级是个痛苦的过程 缺点缺点 谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 装饰装潢


经营许可证编号:宁ICP备18001539号-1