InfoQ:我们都知道在数据库性能达不到我们要求的时候,通常会考虑使用Cache。前面您的演讲中讲到了阿里巴巴国际站的一个Cache策略,能不能在这里更详细地给我们讲一下阿里巴巴国际站是怎么使用Cache的?
潘:其实阿里巴巴国际站在使用Cache跟使用其他技术时都遵循了同样的原则,即使用合适的技术去解决合适的问题,所以我们首先会对应用做一个划分,把我们的Cache定位到不同类型的应用场景。我们目前既有分布式的Cache解决方案,也有集中式的Cache解决方案,甚至还有内存Cache解决方案。我们会根据不同的应用场景分别应用这些方案,当然我们的Cache种类也比较多。当然我们还有一些阿里系特有的解决方案,把一些对性能要求比较高的数据载入到内存当中,形成内存Cache,同时这些数据有集中管理的要求,其实是一种可以集中管理的分布式内存Cache。大概是这样几种。
InfoQ:当网站发展到了一定规模的时候,肯定会涉及到负载均衡,还有多IDC部署,甚至是跨洲际的IDC部署。在跨IDC部署的时候,肯定会遇到数据同步的问题。在国际站,跨洲际IDC部署的数据同步是怎么做的呢?
潘:首先,跨洲际的IDC负载均衡还是一件相对比较简单的事情,其实就是通过DNS轮寻的方式,我们的轮寻方案也还是比较简单,根据用户所在的地区,加上一定的策略,去选择对他来说相对访问时间比较好的网站。
至于数据同步,现在多IDC之间,我们都有一个双向同步的通道,同时会针对不同的数据同步类型,设定不同类型的策略。国际站的数据同步总体而言,多个IDC之间所有的状态同步都是通过一套数据同步系统来实现的,无论是数据库,还是文件,还是一些Cache,它的实现原理基本上类似于一个完全消息驱动的系统,当然它比消息驱动要复杂的是在于我们需要在数据同步系统里面去处理一些异常检测,或者说业务数据的冲突检测等一些逻辑,所以这是一套比较庞大的系统。因为还涉及到一些比较具体的技术点,比如说一些Oracle的内置分析,或者说一些高可用的队列,所以总体而言,我们其实是用一套统一的数据同步的解决方案来解决多个IDC之间所有的数据同步,不仅仅是数据库的,也有文件的,也包含所有其他的状态数据。
InfoQ:现在很多网站都在追求高可用、高性能,对于一些刚刚起步的网站来说,您对他们有什么建议吗?
潘:我觉得,首先所有的网站设计都应该是从业务的角度出发,这是第一点,不能纯粹为了技术而去追求一个比较完美的一个目标;其次,很多问题在业界都有比较成熟的方案,作为一个刚起步的网站,应该尽量选择一些业界比较成熟的技术,去作为自己的基础架构。
当然,在此之外,我觉得作为架构师,还有一个很重要的素质,要解决所有碰到的问题,甚至直接去深入到一些细节,这样才能保证整个网站架构的可用性,或者说稳定性。这点我很想强调一下,不要放过任何一个碰到的疑难问题,往往一些小问题会对架构产生很大的影响。
InfoQ:您刚才提到了业务,其实在一个公司里,业务与技术应该是相辅相成的,作为一个架构师,不仅仅要着力于技术,更多的时候应该去做技术与业务的权衡,您作为国际站的架构师,有没有这方面的经验跟大家分享一下?
潘:首先,我觉得架构的事情,不能纯粹看成是一个技术的事情,因为一个好的系统,如果没有业务系统去配合,那它是很难长成或者说演化成一个相对完善的系统的,所以我觉得架构师首先要熟悉业务,甚至要擅长做一些系统业务的建模;其次,我觉得业务和技术的关系就是一个成本和收益的问题,业务就是我们的收益,技术就是我们的成本,所以不能完全从业务的角度,也不能完全从技术的角度出发去解决问题,应该充分评估我们的收益和成本,决定用什么样的技术去解决问题。我比较赞同一个观点,技术或者说架构其实是业务驱动的。