版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、挖财应用架构介绍,01,PART,关于我,挖财资深架构师,从事软件开发有十多年 曾在阿里巴巴担任架构师,Ali-tomcat负责人 有丰富的企业开发和互联网架构经验 同时也是函数式编程爱好者,和Scala布道者 个人blog:,02,PART,开发团队以及后端架构概况,1.0开发团队以及后端架构概况,02,PART,开发团队以及后端架构概况,挖财的后端技术 在线系统涉及的开源产品和框架: Nginx、Tomcat 、Spring-mvc/Play Springboot、Dubbo、Zookeeper、Spring、Mybatis MySql、Cobar、
2、Hbase、Mongo、Redis/Memcached Kafka、Storm Zabbix、ELK 开发语言: Java/Scala, Go, C+, Python/Php,02,PART,开发团队以及后端架构概况,技术架构概况,交易,用户,资产,支付,流水,风控,基础设施,存储,消息,框架,发布,运维,社区,记账,钱管家,理财,快贷,信用卡,02,PART,开发团队以及后端架构概况,产品中心,交易中心,支付中心,货架,App,Web,订单,持仓中心,生成订单,支付,支付通知,更新持仓,消息中心,发消息,理财业务局部模块,02,PART,开发团队以及后端架构概况,典型的技术架构,Nginx,
3、Tomcat,Tomcat,Dubbo/ Springboot,Dubbo/ Springboot,Dubbo/ Springboot,Nginx,Tomcat,Tomcat,web,app,Dubbo/ Springboot,Session,Cache集群,DB集群,Cache,kafka,Akka,数据处理程序 或计息系统,02,PART,开发团队以及后端架构概况,记账数据存储,ha-proxy,cobar,cobar,应用集群,mysql,实例n,Hbase集群,归档程序,02,PART,开发团队以及后端架构概况,自动记账数据处理,classifier,raw-data,kafka,di
4、stiller,distiller,distiller,DB,event,listener,assembler,assembler,assembler,subscriber,akka,akka,02,PART,开发团队以及后端架构概况,数据分析,cobar,mysql,mysql,mysql,Hadoop/Spark,kafka,binlog,Storm,redis group,codis,redis group,canal,03,PART,Java/Scala在挖财的用法,2.0 Java/Scala在挖财的用法,03,PART,Java/Scala在挖财的用法,语言之争,通过反观过去半个世
5、纪以来编程语言的进化方向,我认为编程语言绝对不会按照保罗.格雷厄姆所说,向着“小而干净”的方向进化。现在的编程语言,无论时功能上还是语法上都已经不是那样单纯了,虽然也曾经有人努力尝试将这些语言变得更小更简单,但包括保罗.格雷厄姆自己所设计的Arc在内,都决不能算是成功的尝试。 在我看来,编程语言的进化动机,不是工具和语言本身的简化,而是将通过这些工具和语言所得到的结果(解决方案)更简洁地表达出来。近半个世纪以来,编程语言不断提供愈发高度的抽象化特性,也正是为了达到这个目的。因此我们可以很自然地认为,这种趋势在将来也应该会继续保持。 松本行弘,03,PART,Java/Scala在挖财的用法,选
6、择Scala的理由和注意事项,理由: 大部分架构师都喜欢这门语言,并有实践经验 注意事项: 1) 不能单点,至少要有几个好基友都能hold住 2) 团队的意愿 3) 培养,不强迫 4) 谨慎使用Scala生态框架,不轻易改变Java主流框架 Scala语言很好,但社区成熟度很差!,03,PART,Java/Scala在挖财的用法,Scala的优点,更简洁、高效的表达 一些模式,Scala直接在语言层面支持: 1)singleton pattern object 2)visitor pattern pattern matching 3) facotry pattern apply method
7、4) builder pattern currying 5) dependency inject cake pattern 6) immutable pattern val 7) value object case class .,03,PART,Java/Scala在挖财的用法,Scala的优点,静态类型也可以支持动态语言的特性: 鸭子类型 pimp my library(implicit ) Scala 2.10 Dynamic Types. 函数式特性可以自定义程序的流控 C# using语句 借贷模式 强大的集合操作: / 从一组流水中找出有转账关系(交易号相同)的 cashflowB
8、uf.groupBy(_.transactionNo).filter(_._2.size = 2).values / 找出相差不超过1的相邻元素 scala val timeList = List(1,2,3,5,7,8) scala timeList.sliding(2,1).filter(e=e(1)-e(0)=1).foreach(println) List(1, 2) List(2, 3) List(7, 8),03,PART,Java/Scala在挖财的用法,Scala不好的地方,门槛 函数式背景(大部分程序员不具备) 例如 eta规约 类型系统(带来安全性的同时也增加了复杂性) 大
9、量基于类型的模式(type class及其变种) 协变、逆变、视界、路径依赖类型、type lambda等概念众多 Scala类型系统是图灵完备的,可实现SKI calculus,03,PART,Java/Scala在挖财的用法,Scala不好的地方,灵活性在团队协作上的问题 减少高阶特性 克制,不要炫技 约定编码风格 利用编译器参数,03,PART,Java/Scala在挖财的用法,Scala在挖财的使用方式,使用Scala语言,但不使用它的框架 (akka除外) 不改变前端的servlet编程模型 仍围绕Spring为中心,03,PART,Java/Scala在挖财的用法,Scala在挖财
10、的使用方式,Scala 与 Spring, MyBatis 等主流框架 无缝集成 BeanProperty case class 构造参数注意声明为var,并提供无参构造器 Akka 与 Spring 扩展 Scala与Dubbo框架 无缝 API/Interface 仍只用Java Provider端对象序列化时Scala标准类库全部转为java,调用者可以不依赖Scala,03,PART,Java/Scala在挖财的用法,Scala在挖财的使用方式,Jdk8, Scala2.11 Eclipse/IDEA/NetBeans REPL(要用好 ) maven或sbt,推荐用maven (人员
11、水平参差不齐,maven已够用) 每个工程在开发时都要保证能以: mvn spring-boot:run 或 mvn tomcat7:run 方式运行起来 一些有用的编译参数: -explaintypes -Yno-adapted-args -Ywarn-dead-code -Ywarn-unused -Ywarn-unused-import,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,3.0 Cobar/Kafka/Akka等中间件产品 在挖财的使用经验,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Cobar,相对稳定,经过
12、阿里的业务考验 个别可规避的小问题 Hash sharding vs Range sharding,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Kafka的使用经验,1) 作为分布式管道 单机版: cat file | grep content | awk print $1,kafka,scriber,分布式版:,filter,processor,2) 作为存储器和Journal System 充分利用了磁盘和文件系统特性 日志:每个软件工程师都应该知道的有关实时数据的统一抽象,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Ka
13、fka的使用经验,http-proxy,异构系统的消息发送,JVM系统的消息发送,Kafka集群,消费者,zk,zk,zk,redis,offset,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Kafka的使用经验,基于SimpleConsumer的封装 offset存于redis而非zookeeper 允许一组消费端串行消费某一分区的消息 运维体会 相对稳定,投入精力少(一个人1020%精力) 业务消息规模未达到亿级之前,可采取简单方式管理,topic只采用单分区,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Kafka的使用
14、经验,运维案例 1)同步或异步都可能出现重复发送 2)msgSize, replicaSize,fetchSize 的参数不一致问题 3) 测试环境流量异常的问题,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Akka的使用经验,数据处理中大量使用 未使用持久化和集群等复杂特性 一个简单的场景,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,基于混合云的引流,Processor,Kafka Receiver,APIInvoker,pull,response,Storer,API-1,Submit Async HttpInvoke,c
15、allback,API-2,API-3,Recycler,success,exception,Actor的分工,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Akka的使用经验,无锁的世界 天然的扩展性 底层还是基于线程池的实现 ForkJoin 效率很高,容易把CPU跑满,work-stealing (工作窃取)的实现,Local Queue 为空,双向队列,task,task,task,task,LIFO Youngest-first,FIFO Oldest-first,分配任务 进队,Work-stealing,为空时随机从其他队列中stealing,04
16、,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Akka的使用经验,与Kafka很搭 分布式的管道与命令 Akka 与 Spring 的整合 对象/Actor 创建的问题 Akka Extension,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Akka的使用经验,实践小结 Actor职责尽可能单一 避免阻塞 Supervisor和错误处理 Push vs Pull WaterMark 邮箱监控,04,PART,Cobar/Kafka/Akka等中间件产品在挖财的使用经验,Akka常用模式,替身模式(cameo pattern) Pa
17、ttern.ask 就是一个例子 Extra pattern Circuit Breaker WaterMark,优雅(顺序)关闭的问题,优雅(顺序)关闭的问题,Governor:Terminator模式的变种,master,governor,user,kafka receiver,processor,Governor掌管所有真正干活的actor 的生杀大权,它们都由governor创建,Master负责调度,watch,Master把自己也“注册”给Governor 由governor监视它的死亡,优雅(顺序)关闭的问题,提供一个 Governor的模板,实现顺序停止子Actor abstr
18、act class ContextManager(signal: Semaphore) extends Actor / 顺序的停止所有子actor protected def stopAll(kids: ListOrderedActorRef): FutureAny = kids match case first : Nil = gracefulStop(first.actor, stopTimeout).flatMap _ = Future AllDead case first : rest = gracefulStop(first.actor, stopTimeout).flatMap _ = stopAll(rest) case Nil = Future AllDead .,优雅(顺序)关闭的问题,实现 Governor 时,指定每个子Actor的关闭顺序, 比如下面在shutdown时先停止receiver再停止processor最后停止storer class Governor(signal: Semaphore) extends ContextManager(signal) override def createActors() v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 坚守学术准则诚信治学承诺书(7篇)
- 环境治理与修复承诺书5篇
- 家庭安全监测系统优化方案
- 数据信息守秘及合规使用承诺函(6篇)
- 确认某项成果的确认函8篇
- 公司规章制度管理与执行系统
- 软件公司产品研发流程手册
- 技术研发项目需求分析与计划书范本
- 通信设备制造业产品创新与质量管理方案
- 用户服务满意度提升承诺函3篇
- 大学物理力学5功和能
- T-CPI 11037-2024 石油天然气钻采设备水力振荡器技术与应用规范
- 人教版PEP四年级英语下册全册单元测试卷(附听力材料)
- 尼康CoolPixP100中文说明书
- 《Python程序设计任务驱动教程》 课件-第2章 Python基础
- 城市道路挖掘修复工程投标方案
- 蜗牛与黄鹂鸟(课件)人音版音乐二年级上册
- 小型水库除险加固毕业设计样本
- PLC在航空航天与飞行安全中的应用与智能化控制
- 软件生存周期过程控制程序
- 工业互联网网络建设技术规范
评论
0/150
提交评论