关系型数据库实践

关系型数据库是绝大多数系统的数据核心,这个关键设施也往往是性能的瓶颈。以下是一些使用建议。 按业务场景设计表结构 业务场景: 一个mysql的用户表,1000万条记录,如何查询出当天生日的用户? 表结构通用规则 所有字段必须非空而且有默认值。 一般都有创建时间和更新时间字段,mysql5.6+ 支持数据库本身更新此字段。 尽可能不使用TEXT、BLOB类型. 表字符集尽量选择UTF8MB4,mysql的utf8不是标准的字符集,utf8mb4可以存储表情字符。 索引字段尽可能使用int/long, 索引为字符型不能超过32个字符。 注释尽量清楚 建表的时候应该考虑最终的数据量,mysql单表应该不超过1000万,分布式数据库按业务字 …

微服务的粒度

得益于nginx等反向代理的流行以及metrics/endpoit规范的成熟。微服务的理念开始流行了。 但是微服务究竟要多"微"才合适?以下是我的个人实践。 不能按接口分: 这样的粒度太细.比如新增订单/查询订单分为两个microservice,优点是可以根据各自的负载合理分配服务器 资源。缺点是microservice数量过多,这样拆分的话,至少存在几十个service,这样对service的依赖关系,监控 /部署都增加很大的难度。 不能按数据库表名(table)分: 这是个鲁莽的做法。很明显,数据库的的事务处理将极为棘手。 不能按数据库名(db)分: 这样的粒度太粗.好处是本地数据库数据一致性问题很好解决。缺 …

stateless server 最佳实践

stateless server 即无状态服务。相对与传统的http server存在session,无session的 http server称为stateless server,现在一般应用于restful service. Why: session的概念存在这么多年,一定有其合理之处,为什么要抛弃它? session的起源: session根源于http的cookie. http协议本身是无状态的协议,server是一问一答,答后不管。为了加入 状态,来辨识是否访问/是否登录的需要,加入了cookie。服务器的session就是对应浏览器端的cookie. 为什么抛弃session: 高并发的访问,session制约 …