Dubbo 是一款高性能的分布式 RPC 框架,它采用了基于 Java 序列化的默認序列化方式。所以在提高 Dubbo 的性能時,部分開發者會嘗試使用 JSON 序列化方式。但是,在實際開發中,我們發現使用 JSON 序列化的方式可能會導致更多的性能問題和安全隱患。
首先,JSON 序列化方式雖然可以使數據在網絡傳輸時更加語義化,但也意味著序列化/反序列化的操作會變得更加復雜和昂貴。相比之下,基于 Java 序列化方式的序列化/反序列化操作更加簡單高效。
其次,使用 JSON 序列化方式還可能會導致 Java 對象與前端/移動設備等其他語言的兼容問題。因為在 JSON 序列化中,Java 對象的類型信息會丟失。因此,在接收方無法準確判斷傳輸過來的數據該如何處理的情況下,難免會導致諸多問題和錯誤。
最后,使用 JSON 序列化還存在著安全隱患。因為 JSON 支持對象的可擴展性,如果不加控制地接受并序列化前端/移動設備傳來的 JSON 字符串,就有可能引發各種 XXE(XML External Entities)攻擊,例如 DTD(Document Type Definition)攻擊等,從而危及系統的安全性。
@Service(interfaceClass = UserService.class) public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public User getUserById(Long id) { return userDao.getUserById(id); } }
綜上所述,雖然 Dubbo 默認采用的是基于 Java 序列化的方式,但這種方式確實是最適合 Dubbo 的。當然,為了提升 Dubbo 的性能,Dubbo 也提供了多種序列化方式的支持,開發者可以根據實際情況進行選擇。
下一篇vue代碼怎么混淆