4.5 基于 base62 的分片策略
Hash(long_url)%62作为分片键
并将 hash(long_url)%62直接放到 short url
若原来的 short key 是 AB1234,则现在的 short key 是
hash(long_url) % 62 + AB1234
若 hash(long_url)%62=0,那就是0AB1234
这样,就能同时通过 short、long 得到分片键。
缺点:DB 的机器数目不能超过 62。
所以,最后最佳架构:
4.6 还能优化吗?
web server 和 database 之间的通信。
中心化的服务器集群和跨地域的 web server 之间通信较慢:如中国的 Server 需访问美国的 DB。
为何不让中国的 Server 访问中国的 DB 呢?
若数据重复写到中国 DB,如何解决一致性问题?很难解决!
思考用户的习惯:
中国用户访问时,会被 DNS 分配中国的服务器
中国用户访问的网站一般都是中国的网站
所以可按网站的地域信息来 sharding
如何获得网站的地域信息?只需将用户常访问的网站汇总在一张表。
中国用户访问美国网站咋办?
就中国 server 访问美国 db,也不会慢太多
中访中是用户主流,优化系统就是针对主要需求
于是,得到最终架构:
还可以维护一份域名白名单,访问对应地域的 DB。