我目前正在建立一个类似的系统(专业水平),这是我选择的设计:
- 两个Nginx负载平衡器(均处于活动状态,两个都进行故障转移,并与DNS循环平衡)
- 两个MySQL数据库处于master master复制模式
- 两个Tomcat实例作为tomcat集群
- 两个Memcached实例,用于Tomcat集群的缓存和会话状态共享
这将实现冗余,高可用性,可扩展的解决方案。
负载均衡器(在适当的硬件上)将轻松地对每个饱和的1gbit线路进行负载均衡。这也是SSL卸载的好地方。
您可以将会话信息保存在memcached中。如果一个tomcat实例失败,另一个tomcat实例可以检索相关的会话信息,并且客户端不会注意到任何事情。不要忘记将其与粘性会话结合使用。(以减少网络流量)
Tomcat群集还具有一个选项,可以在群集之间实时共享会话信息,而无需使用memcached。尽管我认为性能是明智的,但使用Memcached会更好。
如果您需要在以下任何一种应用中使用更多功能:
- Nginx:添加更多的负载均衡器,尽管我认为这不会很快成为瓶颈。
- Tomcat:您可以轻松增加Tomcat群集的大小或添加更多群集
- Mysql:添加一些只读从属服务器或增加群集大小(取决于您的应用程序,但是由于您编写了基于REST的应用程序,因此这应该不是问题)
- Memcached:添加更多节点,我相信Memcached可很好地扩展。
我不知道您的应用程序是如何构建的,资源消耗是多少,但是如果您发现数据库负载很高(在负载测试期间!),则在应用程序和数据库之间添加缓存肯定可以大大提高性能。但是请不要忘记,并非所有内容都是可行的,如果您的查询始终不同,那么缓存将无济于事(很多)
我的建议是下载VMware Workbench(或similair虚拟化软件)并尝试创建简单的设置。无需负载平衡或群集,仅需基础知识并从那里开始工作。一个接一个地添加更多功能(平衡,缓存,群集等),并确保对每个主题进行一些研究,因此您会知道选择正确的。
如果在此过程中继续运行相同的性能测试,则可以亲自了解在设置中使用X是否比使用Y更好,或者缓存将产生什么影响等。
最后,这样的设置实际上取决于您的应用程序及其客户端的需求,所有的事情都可以通过各种方式来完成,每种方式都有自己的优点和缺点。
还有其他问题吗?
祝好运!
卫斯理