Q:什么情况下适合用Client模式,什么情况适合用Proxy模式呢?

    A:这个问题可以从以下三个方面考虑:
    1、语言与数据库:client模式目前做得完善成熟的,只有sharding-jdbc,以及之前的TDDL,都是java的,所以,如果是java语言的话,可以用client模式。其他语言,可以自己搞个简单的,或者侵入性强的sql封装,这一块其实很难,可以说非java语言的话,都不好做。proxy模式没有语言限制,什么语言的业务端系统只要有驱动就可以用。但反过来,client模式,可以使用多种数据库,拿java的jdbc来说,mysql、pgsql、oracle、sqlserver都能用。proxy模式,只能用开源的数据库,比如pg和mysql,因为要实现数据库的私有接入协议,商业数据库是不开放的。
    2、性能:client模式,少了中间一跳,性能要好一些。
    3、易用性与技术决策:对于希望研发团队对技术做更多把控的团队来说,client模式因为所有的规则配置和策略整合都在业务侧,所以更好管理。而对于运维和基础能力更强的团队来说,使用proxy,让开发对策略透明,侵入性更小,使用更简单。同时,一般情况下分库分表不是一个新系统的需求,而是一个发展了一段时间,业务变复杂,数据量变大以后的改造和重构需求,引入client(例如sharding-jdbc)可以更平滑。