• 1. 积分系统开发总结汇报人:潘洪亮云施工我的QQ:8797575 扬帆起航 http://my.oschina.net/itnms/blog hongliangpan@gmail.com
  • 2. 代码就是文档.我们程序员最烦两件事: 1,写代码的时候还要写文档,太tm麻烦! 2,接手别人的代码,tn的居然没有文档! 借用 童心 童老大微信里的一句话自己不爱写文档抱怨别人没文档平等对待自己和别人,养成写作总结的习惯文档不只是代码
  • 3. 变大变小.1,打电话的时候变小! 2,看视频、玩游戏、看书时变大!奇酷手机发布 小机机15% 打电话、小手机85% 大屏才过瘾空空才能做到只有孙悟空和cj空能做到
  • 4. 目 录积分系统介绍1设计2开发3工具4
  • 5. 积分?3积分、等级、荣誉、云币商城积分云币荣誉等级对用户进行激励就是为了让用户更多的使用其产品或者服务,这样才能实现产品的价值。 而积分体系就是比较常用的一种对用户的激励方式。通过积分、等级、云币可以鼓励用户使用产品,并且是按产品提供者想要的方式去使用产品。
  • 6. 积分系统介绍1采集各个产品的用户动作行为,根据系统的规则,奖励用户积分、评定用户经验等级和荣誉等级,并进行云币奖励;通过系统进行简单的行为分析。 主要功能它包括一个静态的制度体系,和一个动态的引导过程。积分规则就是静态 活动就是一种动态引导的过程
  • 7. 积分商业价值表现图积分商业价值增加用户黏性了解用户的诚信度满足用户虚荣心让用户按产品提供者想要的方式去使用产品开发具有商业价值的增值服务
  • 8. 积分系统的整体结构1.规则模型2.动作数据采集3.积分计算4.统计查询5.积分商业价值提升体系6.积分消费体系积分兑换云币云币商城产品 动作 参数产品端云施工论坛、微博终端实时计算经验、荣誉每日限额、有效时段、等比计算TopN、BottomN 使用率排名计算插件个推趋势分析 热点分析占比分析数据汇总保持活跃度促进互动等级计算、 奖励云币经验等级 荣誉等级 升级规则 云币奖励规则活动排名北斗
  • 9. 积分名称级别结构图积分名称级别【经验或荣誉】1级2级3级(大师)翻样达人最多求助哥最多求助姐大财主最能分享者乐于助人哥乐于助人姐
  • 10. 积分获取方式积分获取方式 每个产品定义自己的行为动作和业务动作用户注册手机、邮箱、实名认证在线时间上传术语回复求助日志评论、相册评论、投票参与、留言回复分享信息好友邀请信息加精
  • 11. 目 录积分系统介绍1设计2开发3工具4
  • 12. 系统设计2
  • 13. 设计.积分系统,作为公司级通用系统,可以进行系统级复用。 主要功能,采集异构产品的用户动作行为,根据系统的规则,计算用户积分、评定用户经验等级和荣誉等级,并进行云币奖励;支持灵活的积分计算规则。目标设计原则概要设计接口设计采集代理方案数据库设计
  • 14. 队列解耦机制 热点分离机制 预计算原则 多级缓存 以空间换时间 以时间换空间 分区机制 插件机制 异步处理 对象池 批量存储 无锁并发设计原则.
  • 15. 业务逻辑.业务逻辑:加解密、数据采集、动作转积分、每日限额、有效时段、项目 增量差值计算、实时积分计算、积分明细日志、等级变化、奖励云币、自定义插件、数据汇总;实时排名;缓存维护一致性
  • 16. 队列解耦机制.内存队列、无锁内存队列Ringbuffer、EventBus、分布式队列kafka 生产者生产数据入队列=>队列缓存=>消费者取数据 队列采用先进先出的阻塞队列,队列前后分别有至少一个线程,前一线程负责往队列中放数据,后一线程负责从队列中取数据进行分析处理等操作。同MQ类似,队列机制是进程内的消息总线,各种队列相当于消息通道。生产者消费者模式
  • 17. (本页无文本内容)
  • 18. 并发难点在哪高效、稳定、可扩展 多线程、锁、竞态条件 死锁、加锁肯定慢 变大变小的需求又来了 有没有无锁的并发?
  • 19. 无锁并发.Disruptor(无锁并发框架) Ringbuffer无锁队列 Akka actor消息驱动、事件驱动。
  • 20. CAS CAS(比较与交换,Compare and swap)  是一种有名的无锁(lock-free)非阻塞算法 乐观锁 原子计数AtomicLong compareAndSet
  • 21. CAS存款例子A +100 select money from table where id=? update table SET money=oldMoney+100 where id=? 同时向一个账号存款 :B+500 select money from table where id=? update table SET money=oldMoney+500 where id=? 结果可能是:100 500 600
  • 22. 无锁队列ring buffer维护两个指针,“next”和“cursor”。 写:基于CAS的“get-and-increment”操作,将“next”指针进行自增
  • 23. canal无锁队列定义了3个cursor Put : Sink模块进行数据存储的最后一次写入位置 Get : 数据订阅获取的最后一次提取位置 Ack : 数据消费成功的最后一次消费位置 CAS操作
  • 24. AKKA 分布式消息传递-事件驱动、分而治之 无锁无阻塞、无共享内存 就像发邮件一样简单
  • 25. (本页无文本内容)
  • 26. 热点分离机制.
  • 27. 热点分离机制.
  • 28. 热点分离机制.将系统频繁访问的数据,独立存储或内存缓存。如: 用户的积分、活动的最新数据、最近15分钟数据等,可以冗余存储,以空间换时间。 短信发送,重要数据、及时数据独立通道发送。高频15% 热点85% 我不叼你刚需、痛点、高频
  • 29. 预计算原则.预先计算、预先汇总、预先组织好所需要的数据。 页面应用中经常访问的数据,预先汇总计算好,提高查询效率。比如:最新采集时间、最大值、最小值、最新数据等。 天周月的数据汇总逻辑饭在锅里,女人在床上
  • 30. 多级缓存.支持多级缓存分布式redis、local缓存等 全量map、loadingmap、table、queue、单例 1.数据量小,全量缓存,如产品动作指标 2.数据量大的,延迟加载,如用户信息、最新数据、每日限额、项目动作数据;活跃用户的数据在内存,lru淘汰 3.Rsa非对称解密key的缓存 解密后的key缓存,减少每次解密的时间成本 要求客户端,请求key不要总变化; 4.表达式解析的缓存,节省表达式解析时间缓存是必填项 缓存无处不在
  • 31. (本页无文本内容)
  • 32. 以时间换空间.增加存取时间、节省存储空间。 空间或io:内存、磁盘、网络带宽时间增加空间减少日志文件的压缩 传输数据的压缩
  • 33. 以时间换空间.数据压缩传输,增加压缩时间,节省传输带宽; 文件滚动记录并压缩存储,节省存储空间、传输带宽; 日志文件、文本文件等 rollingPolicy(TimeBasedRollingPolicy) { FileNamePattern = LOG_FILE+‘point-%d{yyyyMMdd}.zip' } 时空穿越
  • 34. 入口处Nginx网卡瓶颈: gzip压缩,硬件升级 增加带宽空间
  • 35. 以空间换时间.缓存,内存增加效率提升;占用内存空间 天周月数据汇总,增加存储空间,提升查询效率;占用数据库表空间、磁盘空间 主从、读写分离数据冗余存储;磁盘空间 积分历史数据、积分最新数据;存储多份 时空穿越月报和年报 数据冗余存储 缓存和持久化多份存储 分布式文件系统
  • 36. 分片分库分表.自动分区 http://dwz.cn/1GFNwh
  • 37. 插件机制.为方便采集不同产品、不同来源的数据,适应不同项目的二次开发需求,系统框架提供plugin机制。应用只需实现插件接口,满足平台的插件规范,就可以发布到系统中,进行数据采集分析。积分计算规则的动态扩展支持热部署,不重启server
  • 38. 插件机制.积分计算规则的动态扩展支持热部署,不重启server
  • 39. (本页无文本内容)
  • 40. (本页无文本内容)
  • 41. 批量存储.计时计数:300条一提交或一分钟已提交 批量提交新员工参见智慧建筑体验馆 一个一个看 30个人一起看 3000人一起看
  • 42. 并发异步.并行最终一致性流程:数据采集--接收--缓存--分发--处理器--入库--呈现
  • 43. 静态数据接近用户、动态数据接近计算.【移动计算、而非移动数据】应用 产品端:缓存积分信息、积分规则 云端:缓存活跃用户积分、全量缓存热点小表
  • 44. 对象池.单例 对象池: 线程池、连接池Rrd、ringbuffer
  • 45. 采集代理设计把生命浪费在美好的事物上 把时间浪费在美好的事物上 生活,就是和喜欢的一切在一起
  • 46. (本页无文本内容)
  • 47. (本页无文本内容)
  • 48. 复用北斗方案.时间延迟
  • 49. (本页无文本内容)
  • 50. 3 产品端接入流程1.注册产品、配置策略、北斗建表同步数据 2.产品埋点 3.验证测试 4.打包安装 5.FAQ等
  • 51. 产品埋点过程四个方法 1.先初始化、2.构建动作json数据、3.记录数据、4.发送数据[到缓存]
  • 52. 数据库设计把生命浪费在美好的事物上 把时间浪费在美好的事物上 生活,就是和喜欢的一切在一起
  • 53. 数据库开发过程1.业务对象分析【对象及依赖关系】 2.数据库脚本 3.生成word文档或schemaspy文档 4.生成80%代码 5.开发20%的特殊逻辑
  • 54. Navicat、SQLyog数据库工具Liquibase Flywaynotepad++、代码生成工具1234工具箱EA 、 Schemaspy、 DBExportDoc
  • 55. 数据库开发规范-初稿.
  • 56. 明确业务对象及关联关系不要急于表的设计 先分析业务对象,参与者及关系
  • 57. 安全检查产品
  • 58. 积分的ER图产品 动作 等级 规则 积分产品
  • 59. (本页无文本内容)
  • 60. 简单设计.脚本 不是word文档,内容完全一致
  • 61. 目 录积分系统介绍1设计2开发3工具4
  • 62. 开发
  • 63. 代码生成工具1有规律,就可以用工具生成。表及注释生成代码开发基于数据库表生成后台代码生成对象、Mybatis映射文件、服务特殊逻辑自己处理开发
  • 64. 这都是生成的方法自动生成的方法
  • 65. 技术栈.Guava18:谷歌开源的工具库,jdk8部分功能参考其实现。【LoadingCache、Service、Resources、 EventBus、Closable、集合、Throwables、Preconditions、Strings等】 Fastjson:阿里开源的最快json工具库 Druid:阿里开源最快的连接池 Jxls:excel文件导出 Netty4:rpc通信 Protostuff:序列化, 速度快,基于protobuf;没有kryo快 Groovy:动态插件,热部署; joda-time:简单的日期工具类 quartz:定时任务调度 logback:性能优于log4jjQuery1.10、SpringMVC4、Mybatis3.2.7 Apache commons、Slf4j-logback、gauva、quartz、groovy Fastjson、druid、jxls-reader-1.0.3、netty、protostuff、joda-time
  • 66. 技术栈.服务器:Tomcat8【生产】 、jetty9【开发】、mysql5.6 jdk8【Java 7终止公共更新】、idea Maven、svn、jira App-core框架及代码生成工具 aesKey采用非对称加密【16或32位字符,经过base64+rsa加密】 数据部分采用对称加密【base64+aes加密】 …
  • 67. SQL注入SELECT * FROM A WHERE a=? 参数:'1' or '1'='1' Delete? 转义字符 SELECT * FROM A WHERE a= '1'' or ''1''=''1‘ 或 '1\' or \'1\'=\'1'###druid WallFilter 可以防止sql注入,可以设置黑白名单,并能监控记录 如:允许或拒绝访问的schema、function、variablemybatis 对于sql注入的解决方案: 避免使用$写法,使用#
  • 68. 表达式引擎jexl 表达式引擎 初始化-单例 验证表达式 解析元数据也就是变量 计算 缓存 动态解析表达式元数据,并缓存
  • 69. (本页无文本内容)
  • 70. 排名汇总规则数据汇总:原始数据=>天=>周=>月=>总计 base=>day=>week=>month=>total 可以按照顺序汇总,也可以跳过汇总,如周数据,可以来源于原始数据、也可以来源于天数据。 来源是base的可以实时排名;来源于天以上的统计数据每天排名;只要有一条天数据,就有周数据;…保证实时和最终一致
  • 71. 横表纵表—最新数据表横表:开发工作多,查询更容易;纵表开发容易,查询复杂 横表带来问题是,innodb行级锁,不能并发更新,需要锁同步
  • 72. 性能优化性能:fastjson、druid连接池、logback、缓存、队列 内存溢出问题处理 滚动文件记录 UUID性能优化,重排序 表分区,按照时间分区
  • 73. 缓存全量map、loadingmap、table、queue、单例 产品动作指标,全量缓存【数据量小】 延迟加载【数据量大的】,如最新数据、每日限额、项目动作数据;活跃用户的数据在内存 Rsa非对称解密key的缓存 解密后的key缓存,减少每次解密的时间成本 要求客户端,请求key不要总变化; 表达式解析的缓存 节省表达式解析时间
  • 74. 单例UUID_GENERATOR 只初始化一次,不能方法调用时每次都初始化 表达式引擎 RSA 内存泄露
  • 75. 内存溢出分析案例.弯路一般分析,自己写的对象增减情况 如:过滤com.ysg开头的包 其实rsa解密的溢出,是java.security
  • 76. 其他成果开发框架完善复用; 简单封装的零配置服务框架 代码生成工具、服务的封装、简单rpc、数据分区、任务调度、工具类【配置文件、比如滚动文件】 自身监控、队列监控、sql监控、 在线配置马上生效 表达式引擎【解析变量、计算】
  • 77. 目 录积分系统介绍1设计2开发3工具4
  • 78. 工具把生命浪费在美好的事物上 把时间浪费在美好的事物上 生活,就是和喜欢的一切在一起
  • 79. Notepad++、Markdown常用工具Mtputty、Winscp、DockerSnagit截图、为知笔记、Evernote、有道词典1234工具箱4BeyondCompare 、UltraFileSplitterPpt压缩工具(PPTminimizer)
  • 80. everything搜索工具歌、娘1234工具箱4FileSearchy Proglary utilities、Listary
  • 81. (本页无文本内容)
  • 82. Axure RP Pro设计工具XMind、freemindSchemaspy、DBExportDoc1234工具箱4EA Enterprise Architect 、visio
  • 83. VirtualBox虚拟化Docker 容器.1234工具箱4VMWare
  • 84. 格式化在线工具扫描工具.1234工具箱4apihttp://tool.oschina.net/
  • 85. 翻墙浏览器翻墙Go agentHosts、freeget1234工具箱4VPN Gate
  • 86. 把生命浪费在美好的事物上 把时间浪费在美好的事物上 生活,就是和喜欢的一切在一起以上,可能有对的
  • 87. 谢 谢汇报完毕欢迎各产品、系统接入积分