ShareSDK,顾名思义,分享的SDK组件,公司基于互联网,早期主要以ShareSDK起家。今日思来,很幸运,能陪着ShareSDK一块儿成长。前端
如图
经典的单体应用架构, 和不少初创企业同样,当时采用这种架构。用redis等缓存挡住并发,用MySQL来存储数据。
前端的报表分析直接操做MySQL便可。
我并不反对单体架构,反而我以为很合适,因为初创企业业务形态并不稳定,单体架构其实很容易调整,杀鸡焉用牛刀。redis
公司是国内第一家作移动端分享SDK的企业,随着业务发展,因为几乎每一个APP都会有分享功能的需求,业务发展飞快。
我记得当时一个“魔漫相机”App就占据了咱们半壁带宽。算法
在业务请求的入口并未根据业务作轻重之分,致使数据交互类的接口以及日志数据上报的接口共享网关。缓存
早期数据直接落地MySQL,经过MySQL作统计分析。架构
因为整个架构比较简单,对于复杂的业务以及大数据分析支持基本上谈不上并发
基于单体应用,咱们基本上看不到将来,这除了单体应用自己的局限性以外,在架构上自己也跑不动。这样就造就了成本以及资源的重度浪费。异步
梳理后的整个服务架构,从请求端到网关API再到具体的业务处理,流量上能够随意切割以及合并,很方便的作扩容以及缩容操做。微服务
数据分为基础数据以及统计分析数据。
将核心关键的基础数据,好比配置信息等提取出来,分库存储,将全部的统计分析数据以及可异步存储数据落地本地磁盘,再由flume实时拉走。这样带来的好处有不少:工具
上述简单讲到了服务架构以及数据架构的演化,可是细致各个环节能够有不少道道。包括服务的自动化部署,DI/DC以及链路监控等并未细说说起。
对于我的,最深入的理解有两点:性能
充分理解各个软件工具自己适合的领域,让专业的软件工具对付它们擅长的业务,而不是一招拍死
架构基于业务,好很差的架构要看什么样的业务,若是换成公司的IMSDK,显然这个架构彻底不合适。
数据每一次流动,均可能伴随必定的异常。那么架构简单如何体现?
能用一两层服务解决的事情绝对不使用三层服务,方便数据追踪跟进以及业务排错。
其次,服务业务尽量简单,ShareSDK的配置服务以及社交信息服务等都是各自独立,这在团队分工优化上也显得简单。
诚然,整个服务架构能够轻松应对千万级并发。可是,我认为能够优化的空间还有不少。指望,整个ShareSDK服务架构能伴随公司继续成长壮大。