软件架构与开发实践指南
1. 技术概述与常见问题解答
在软件开发中,有一种方法可以在写入数据时运行复杂的视图逻辑,从而避免在读取时运行这些逻辑。很多人会问,是否需要构建微服务来实现这些功能?答案是否定的,相关技术在微服务出现前约十年就已存在。聚合、领域事件和依赖倒置等技术是控制大型系统复杂性的有效方法。当为业务流程构建了一组用例和模型后,将其迁移到独立的服务相对容易,但这并非必要条件。
若使用 Django 进行开发,也有对应的解决方案,可参考相关附录内容。
2. 注意事项与阅读建议
2.1 注意事项
在实际应用中,有一些需要注意的地方:
- 可靠消息传递困难 :Redis 发布/订阅并非可靠的消息传递工具,不适合作为通用的消息传递工具。我们选择它是因为它熟悉且易于运行。在实际应用中,可以考虑使用 Event Store、RabbitMQ 或 Amazon EventBridge 等工具。Tyler Treat 在其网站 bravenewgeek.com 上有一些关于消息传递的优秀博客文章,如 “You Cannot Have Exactly-Once Delivery” 和 “What You Want Is What You Don’t: Understanding Trade-Offs in Distributed Messaging”,值得一读。
- 事务处理 :我们明确选择小型、专注的事务,这些事务可以独立失败。在实际应用中,需要监控事务是否失败,并具备重放事件的工具。使用事务日志作为消息代理(如 Kafka 或 EventSt