- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
架构创新——
如何做到与众不同
架构核心
数据和程序分离
最核心的是数据存储和访问
总体设计方案 + 数据库设计
衡量指标
稳定性:Simple is the best.
性能
可扩展
易用性:易于运维
容易运维
部署和维护简单:配置文件统一
减少人工操作:提供工具和脚本
必要的日志记录:便于查找和定位问题
一个Server配置片段
inner_bind_addr = 43
outer_bind_addr = 43
改进后的配置:
#@function LOCAL_IP_GET
inner_bind_addr = inner
#@function LOCAL_IP_GET
outer_bind_addr = outer
架构师发展阶段
第一阶段:模仿
第二阶段:创新
模仿阶段
分层架构
数据库拆分
采用Master-Slave结构
分层架构示例
创新阶段
知其所以然
不要盲目崇拜
创新案例
服务化
实时搜索引擎
创新案例一:服务化
解决内部系统之间的调用问题
模块自洽,减少模块耦合
分工明确,各尽所能
性能是最关键的指标
服务化方案选型
HTTP vs. 私有协议
长连接 vs. 短连接
易到服务化框架
PSF:for PHP
CSF:for C
二者是统一的
自建服务化框架优势
改变服务进程运行方式:以daemon方式运行
省去负载均衡层
省去建连开销:天然支持长连接
— 服务层
— 后台逻辑
二进制私有协议格式紧凑,减少网络流量
PHP服务化
daemon方式运行:改变PHP运行方式
Powered by C:网络通信框架用C开发
PHP服务化框架
创新案例二:实时搜索引擎
基于地理位置的实时搜索
空间索引方式
空间编码方式
GeoHash
自定义编码
GeoHash
GeoHash将二维的经纬度转换成字符串
字符串相似的表示距离相近,可以采用字符串前缀匹配
最大的缺点就是突变性
除了使用定位点的GeoHash编码进行匹配外,还使用周围8个区域的GeoHash编码
自定义编码
可以编码为整数:int(经度 / D) * (10 ^ P) + (纬度 / D)
D为一个格子对应度数,例如1KM对应的度数为0.008998
P为(经度 / D)的最大位数,例如5
(116.388055, 39.907500) = 3293914437
附近位置检索方式
按正方形搜索,搜索正方形中包含的格子即可
经度和维度两个方向,组合出搜索的格子ID
若一个格子纬度方向为1KM,经度方向为1KM * cos(纬度)
检索附近N公里,遍历的格子数:2N * (2N / cos(纬度))
易到实时搜索引擎架构
索引加载和更新机制
架构特点
文档统一存储,searcher不持久化存储数据和索引
不保证数据强一致,只保证数据最终一致
对等结构
技术实现特点
量身定做,耦合业务逻辑
性能上追求极致
采用高性能服务化框架
无锁化:索引读写无锁,延迟释放机制
使用msg-pack实现数据序列化
使用内存池、buffer循环使用
thread local
总结
思维升级:打破思维定势
按需定制:制造更好的轮子
勇于尝试:想明白了就去干!
原创力文档


文档评论(0)