最近有个项目,不知道如何选型,主要有以下几点要求:
1、客户端请求量较大,日均30万次左右,响应时效性高,因此需考虑消息队列及缓存。
2、数据库容量比较大,月均在千万条数据级,因此需要考虑集群部署,而且可能需要部署在云上。
3、数据大部分情况下用于查询,需针对这些数据做简单的统计分析,并形成报表返回给客户端。少部分有写操作。
4、开发效率高,最好能快速上手、快速开发。
5、考虑二次开发或扩展能力。请教各位大神,应该采用什么技术架构及数据库。

解决方案 »

  1.   

    负载均衡,Nginx。缓存redis。消息队列kafka,数据库集群。基本就这些组合了。
      

  2.   

    react/vue/angular + spring boot/springmvc/springioc/mybatis
    数据库看你的业务数据类型的需求了
      

  3.   

    1. 数据库方面,建立主从同步,一主多从。数据库驱动方面,使用读写分离,主库写入,从库读取(可选择其中一两个从库专门做报表,其他从库做业务查询)。
    2. 数据库要根据需求进行分库,除了上述业务库,还要分出一个统计分析的报表库,将报表信息进行记录。当然,还可以分一个备份数据,将统计之后的历史数据从业务库迁移出来。
    3. 业务层接入缓存,加速查询操作的响应。缓存只是优选方案,程序要支持缓存挂掉后,从从库读取数据的业务能力。缓存是否分布式看人力成本的规划。
    4. Java的服务端程序,根据需求,可以拆分成三个部分,一个是面向客户的业务系统,需要上述的技术接入;一个是运营后台,面向项目的运营人员,可以动态配置业务相关的参数或解决在线问题;另一个是统计后台,专门出业务报表给公司内部查看。根据楼主的需求,第三个没有提到。给客户看的报表,直接写到业务系统就好。
    5. 加速开发,如果选用Java语言,那么springboot或者springcloud都可以选。开发速度关键在于架构和技术经理。Leader很重要。
    6. 扩展性和敏捷开发,两者不可兼得。为了速度,还是降低扩展性的要求吧,能吧健壮性提上来,要重要的多。我们追求的是高速可靠的系统。开发时间越短,风险越大。
      

  4.   

    就楼主的业务量,感觉没必要使用消息队列。或者说,根本用不到分布式消息队列。Kafka的最初需求是做线下日志分析的,商用环境的业务总线,使用Kafka并不是太好,可以考虑阿里或者其他大公司的开源分布式消息队列。当然,分布式消息队列,要考虑的几大问题,一定要注意。比如,重复发送,重复处理,等等等等问题。
    前端的技术选型,要看项目的业务特点。后台程序的页面,easyui,vue等等技术都可以。电商性质的页面,灵活多样。选型的时候,尽量考虑现有人员的学习成本。如果有高手带队,一切都不是问题。