SOA关注的是遗留系统的集成和组件重用,落地上依赖厂商的ESB方案。微服务在互联网时代兴起,使用领域驱动的思想划分服务边界,使得系统由大量高内聚、松耦合的服务组成,落地上可以使用多样化的技术方案。SOA体现了中心化的服务中心,微服务则是去中心分。
运营后台为处理一个需求,增加了定时任务,优化不足,结果导致ElasticSearch慢查询,最终影响了正常app业务。良好的测试用例覆盖、常态化性能压测、好的code review以及对需求合理性的推敲,都有助于避免同类故障发生。
语音直播房间项目文章汇总(SD项目)。包括系统设计、性能压测、高并发和优化经历、重构和故障案例
MQ机房迁移,带宽减少,又遇上其他业务方高峰,通道服务处理堆积消息,严重影响SD项目。增加容灾方案设计,避免对MQ、通道服务的单点依赖。
性能压测是发现性能瓶颈的重要方式。吞吐量指标要结合响应时间(TP99、TP90)才有意义。压测预热能获取平稳状态下性能参数。混压比单压更能体现系统性能。不应该使用边界压测数据做为资源规划。
普通版的RocketMQ延迟消息不支持任意精度的时间延迟,因此需要自定义补偿策略。
RocketMQ延迟消息的源码分析。发送消息时设置delayTimeLevel属性。真正保存的topic是SCHEDULE_TOPIC_XXXX,队列是delayTimeLevel。ScheduleMessageService包含一个Timer线程,执行DeliverDelayedMessageTimerTask,对于到期的延迟消息,发送到原来的目标topic。
SD项目的语音直播游戏房间,使用状态模式拆分房间状态和对应行为。服务器端是事件驱动和无状态的。切换房间状态,向RocketMQ注册一个超时检查的延迟消息,用于异常状态下触发房间轮转。客户端和服务器端在房间的交互建立在长连接通道和信令。客户端有pull机制,异常情况下主动从服务器拉取房间的聚合信息,切换本地状态。