PL
优点
语言查询提供的查询接口比较灵活。灵活带来的优点是不言而喻的,它应对未来业务的变化能表现出更好的可扩展性,而且给用户提供的接口也更加简洁。所谓简洁是指完成复杂的查询逻辑只需要少量的语句,说明PL的描述力比较强。
缺点
- 使得后台解析数据的复杂度变大,而且要完全描述出什么是合法的查询语句是非常困难的。
- 灵活带来的缺点是不确定性增大,一般内部模块在查询时最好是不要用这样的方式。因为内部模块之间的查询方式一般都相对比较固定,变化的概率不大。除非业务发生剧烈变化,否则可以通过扩容查询接口的方式来解决业务发展带来的问题。
- 灵活带来的另一个缺点是速度下降,越是灵活的查询语言在解析方面花费的时间越长。
RPC
优点
接口完成的业务功能专一,专一往往就是暗示其具有着高内聚的特性,当然这个也不是绝对的。另一方面是相比起语言来说耦合度比较的低。语言一旦设计不好,就会影响所有这个语言能够描述的业务。而RPC接口的话只完成某项具体的功能,所以就算接口设计不好,影响也只有使用这个接口的业务。
缺点
业务扩展时开发效率偏低,需要针对不同的功能增加不同的接口。所以需求一旦多了起来,就会导致维护的接口膨胀,因为RPC的描述力太弱了。
PB
本质上是RPC的扩展版本,解决了RPC同一个功能扩展需要新增新接口的带来的冗余。
取舍原则
灵活性带来的效率和解析复杂度下降没有想象中那么大,在需要使用灵活度更高的查询时,果断应该使用灵活度更高的查询。查询方式里灵活性越来越大依次为:方法调用(RPC),结构信息(Protocol buffer),查询语言(SQL)。