0 0

为app提供api,架构该怎么设计,需要考虑高并发,访问量比较大。30

有个项目需要重构:原来一个java后端服务的项目,用的是简单的servlet和JDBC 为 android app 提供的api,并发访问通过单例、线程池和多线程、缓存做的。
现在相对这个项目进行重构,考虑设计一套 restful风格的api,不知道有什么成熟的 rest框架可以推荐下。数据库部分的框架ibaits是否合适?高并发访问在写代码的时候又应该注意那些地方?总结下:
在高并发访问,主从多数据库的情况下,
1、restFUL api 该选用什么成熟的框架?
2、数据库部分选用什么框架比较合适,多数据配置该注意哪些?
3、在以上框架的基础上,代码有哪些地方需要注意?

4、以前那种简单粗暴设计有什么缺点?大家可以吐槽。

能给点儿意见的都给点儿意见吧,有指导性的相关链接也可以。我刚接触app后端设计这方面,虚心求教学习。只有30分,全给了。

问题补充:我现在的考虑是: springMVC + ibaits.  redis 做分布式缓存,mysql主从读写分离, apache tomcat +nginx 部署。 rest并不是必须的。
高并发代码注意点暂时没有什么头绪。

7个答案 按时间排序 按投票排序

0 0

采纳的答案

1.关于rest,仅仅是一种风格,至于框架,spring mvc 是比较成熟的,其实这块mvc 框架都不会成为你的问题,从团队熟练以及扩展上来说,spring 是个不错的选择,这块只要你设计好,开放API 是比较方便的。

2.关于数据库方面,如果是读的量很大的情况,比如读写比例10:1的情况下,访问量比较大,你可以考虑数据库的主从,以及负载均衡的一些东西,关于这块的东西很多,得从实际情况进行处理。至于考虑的点,你得考虑数据库压力、信息监控、出现宕机等情况的处理,后面可能还会考虑你的水平扩展问题。

3.关于你说的数据库部分的框架,我没理解,虽然数据库作为存储的东西,你也不可能将压力全部放在数据库端,在访问量大的情况下,你应该考虑缓存框架,像常用的memcache 类似的都比较 成熟了,至于缓存框架的选择,你得根据你的业务量进行选择。一旦你选择的主从或者所谓的读写分离,加上缓存,你得考虑同步、事务、以及一些失效等意外情况,挺麻烦的,这些仅仅是个思路。


4.上面的可能有些多了,其实简单点说,访问量大的情况下:
  a.减少服务器请求压力,可以用nginx 类似的负载均衡的框架
  b.数据库访问压力大,同样你可以多部署几台,主从分离。
  c.大多情况下,请考虑缓存框架,能为你减少很多压力
  上面3点基本上能满足你的业务了,当然更麻烦的东西,得更多了,方向是这样。

5.高并发写代码,只要你清楚了基本原理,其实现在来说并不是很难。所谓并发出现的问题主要还是怕在写入的时候出现数据错误(混乱),其实读取的情况,就是怕效率和死锁等问题,数据不会出错。主从分离后,一般情况下读数据也不会加锁,对数据的实时性,也不会要求那么高了。如果大量的写入,这考虑的就多了.如果非要说注意点什么,得注意你共享变量的读写控制,也就是说带状态的对象的操作得注意点,其他的一般都是数据库层面的的了.

6.ibaits 更新成mybaits 了,这是orm 框架,能方便你开发,没啥好搞的,觉得方便就合适。

7.上面的都是一些一般方法,我觉得监控是很重要的,你得想知道问题点在哪儿,才知道如何改进,还有压力测试一定要有,不然你不知道是否满足。


8.一些小建议,不对的请指出,勿喷~。~

2014年5月12日 11:26
0 0

大并发一般现在比较流行的是通过云端部署,没有云服务的话也可以通过tomcat自己做集群处理,这样的处理一般要求业务比较简单,一个事务中处理时间足够短。

数据库看你要不要横向或纵向分库,如果需要,不建议使用ibaits。
且分库之后要通过业务限制跨库查询的操作
横向分库相对比较简单:
1. 根据表分库,读取写入数据时根据表名确定获取哪个connection
2. 也可以根据条件获取connection,这样更限制你的查询条件,必须每个select中都包含分库条件的字段。
纵向分库则更加复杂,一般使用动态数据源,动态分库。 需要做到这一步的话,建议使用淘宝的tddl做

基本设计到分库,一般数据量都够大,数据库就mysql了

如果只是横向分库的话,JPA框架应该都可以实现。

至于restful API,搞个jaxrs 好了

缓存,多线程之类的,这个根据业务需要看怎么处理合适了。
效率要比较高的话,可以模块化部署,通过内部消息框架通讯
如一些统计,校对,报表等操作,可以单独部署, 一些计算可以部署成无状态的服务,内存计算还是很快的。
消息可以使用JMS,同样也可以使用一些框架,如HSF 也比较牛逼。

简单粗暴的方法可以使用阿里云的分布式数据库,这样不用关心存储了,部署也同样可以使用云服务,这样不用担心并发了。


2014年5月12日 21:19
0 0

如果你在意数据库速度,可以考虑用VOLTDB:一款高速度的内存数据库。

2014年5月12日 12:06
0 0

dropwizard java rest 快速开发框架 我在用

2014年5月12日 09:54
0 0

https://github.com/MaOrKsSi/HZS.Durian

这是一款基于scoket、安全的、针对管理软件的框架。只提供数据服务,不提供资源服务,而且限制并发数量。你可以参考并修改,但框架本身必需保持开源。

2014年5月12日 09:32
0 0

首先第一点,不能为了rest而rest,而是要看自己的应用场景,其实最后性能的瓶颈点不会在MVC框架上,只要这个MVC框架是比较靠谱的框架。

最后的性能点会是:

1. 服务器的内核参数调整,使之能支持高并发的连接,默认是不太能支持的。
2. 缓存的使用,使用得当可以提大地提升系统的性能。
3. 数据库层的优化,当数据大了以后,数据库的优化就显得很重要了,特别是在设计的时候可能就需要反范式来设计了。
4. 如果有多线程的话,就是线程竞争和数据不一致的问题。

2014年5月12日 09:10
0 0

rest现在有好多个实现,比如借助springmvc实现的rest,jboss的resteasy,restlet?jersey?cxf?大概名字记不清了,从方向性文档性发展性来讲推荐3个,如果和spring集成那还是springmvc实现的是不是更好些,虽然其他几个也都能很轻轻的集成,如果有洁癖或者正统思想resteasy也不错(这里只是说它是比较遵守标准相对于springmvc),如果一直中意apache,那么cxf又是一个选择。
如果高并发,是不是选择分布式缓存或nosql数据库?多数据库都是自己搞的,没有什么框架专门针对多数据库数据源的吧。
架构不是我来搭建,代码不是我来编写,所以技术选型应该从你们本身来选,最终的并发量访问量不是一个高字就能描述的。
另外rest本身就不同于平时的风格,它是以资源为中心的,不一定适合你们的应用。
以上,你就算给几百分也解决不了你的问题,几百人回答会有几百答案,结合实际才是最终选择!首先你要做的是需求调研或预估,然后技术调研,团队人员构成,时间,成本。

2014年5月12日 06:59

相关推荐

    完整社交APP需求分析原型设计整体架构前端后端架构.docx编程资料

    1. **负载均衡器**:随着访问量的增长,需要使用更强大的负载均衡器(如LVS)来分发请求,确保系统稳定运行。 2. **数据库复制**:使用MySQL的主从复制功能,将读写操作分离,提高数据处理能力。 3. **读写分离**:...

    酒店软件框架设计方案

    总结,这个酒店软件框架设计方案旨在构建一个全平台覆盖、高并发处理、易于扩展的酒吧服务应用,通过细致的架构设计和功能划分,力求提供优秀的用户体验,同时也为商家提供了强大的管理和营销工具,以适应快速变化的...

    基于H5的跨平台“疫守护”APP设计.pdf

    在技术选型上,该APP的后端采用了NodeJS,利用其灵活性和非阻塞I/O特性,以处理高并发请求。数据库部分结合了MongoDB和Redis,MongoDB用于存储结构化数据,如学生信息和体温记录,而Redis则用于缓存高频访问数据,...

    移动电商弹性云架构设计.pptx

    移动电商架构设计主要关注如何构建一个能够应对高并发、快速扩展和高效运行的电商平台。在这一领域,弹性云架构设计是关键,它结合了多种技术和策略来确保系统的稳定性和可扩展性。 首先,APP端采用混合架构,融合...

    轻量级app后台服务源码java

    【轻量级app后台服务源码java】是一个专注于为移动端应用程序提供高效、低资源占用的后端服务解决方案。这个源码实现了一套完整的Java服务端架构,旨在简化开发流程,提高应用性能,同时保证数据传输的安全性和稳定...

    管理系统系列--一套完整的社群电商系统,后端Api、后台管理系统、前台h5系统、小程序和App.zip

    同时,需要考虑数据一致性、高并发处理和分布式缓存等技术来保障系统的稳定运行。 7. **安全机制**:系统需要具备完善的安全防护措施,如HTTPS加密通信、防止SQL注入和XSS攻击、用户数据加密存储等,确保用户信息和...

    互联网架构为什么要做服务化

    随着并发量增加,用户数据访问成为瓶颈,需要加入缓存来减轻数据库压力。然而,由于没有统一的服务层,各业务线都需要自行处理缓存引入所带来的复杂性。无论是写操作还是读操作,所有业务线都需要升级代码以适应缓存...

    黑锐源码APP分发平台源码

    8. **服务器架构**:考虑到高并发访问,平台可能采用负载均衡、分布式存储等技术保障性能。 9. **数据库设计**:包括用户信息、应用信息、下载记录等多个表的设计,保证数据的一致性和完整性。 10. **前端开发**:...

    微信小程序购物商城app设计带Java后端源码案例设计.zip

    同时,后台服务也需要进行负载均衡和高可用性设计,以应对高并发场景。 8. **测试与部署**: 完成开发后,需进行单元测试、集成测试和压力测试,确保系统功能正确且稳定。最后,将应用部署到服务器,如阿里云、...

    社交类app后端.zip

    1. 微服务架构:从"dingding-app-server-master"的命名可推测,该App后端可能采用了微服务架构,将复杂的应用程序拆分为一组小型、独立的服务,每个服务都专注于一个特定的业务功能,使得系统更易于扩展和维护。...

    appweb-6.2.1-src.tgz

    在实际应用中,我们还需要关注 AppWeb 的安全性和性能优化,例如设置合适的并发连接数、开启 SSL 支持、限制访问权限等。此外,AppWeb 的模块化设计允许开发者根据需求编写自定义模块,进一步增强服务器的功能。 总...

    基于Android的校园选座App的设计与实现.pdf

    - **高并发处理**:系统需应对周期性的高并发访问,如晚自习、答疑时间等,最小并发量为500-700人。 - **TCP请求**:用户在线时,为了实时更新,会频繁请求服务器,服务器需处理高并发TCP连接。 4. **系统结构与...

    2012年中国系统架构师大会PPT-2 WebApp开放平台的系统架构设计

    该平台旨在为用户提供丰富的Web应用程序体验,并为开发者提供便捷的开发环境。本篇将详细介绍该开放平台的系统架构及其关键组成部分。 #### 二、平台概述 WebApp开放平台是基于Web技术构建的应用程序分发平台,通过...

    微信小程序学生选课系统app设计后端SSM可升级SpringBoot毕业源码案例设计.zip

    例如,用户登录通常需要处理密码加密与安全校验,而选课操作则需要考虑并发控制,避免同一课程被多个学生同时选中。 在前端,考虑到提到的“小程序”,可能使用微信小程序作为用户界面。微信小程序是一种轻量级的...

    谈谈微服务架构和开源.pdf

    而缓存层则常用Redis、Codis或Redis集群等技术,它们提供快速的数据访问,减轻数据库压力,并增强系统的响应速度和并发性能。 总体来说,微服务架构和开源技术的讨论涉及到多个层面,包括服务的设计、构建、部署、...

    Java电商系统 商城前端使用uni-app开发, 可打包部署到微信小程序, APP, H5,系统后台则

    本项目是一个基于Java技术开发的电商系统,其前端部分采用了uni-app框架进行构建,具备高度的灵活性和跨平台特性,可以方便地打包部署到微信小程序、原生APP以及H5等多个平台,为用户提供无缝的购物体验。...

    基于Android开发学生公寓集体订餐系统.zip

    本项目“基于Android开发的学生公寓集体订餐系统”是一个使用Java编程语言并调用Android SDK接口来实现的移动应用,它为大学生提供了方便快捷的订餐服务,同时也为学校后勤管理部门提供了一套高效、智能化的管理平台...

    微信小程序购物商城app设计带Java后端毕业源码案例设计.zip

    微信小程序购物商城app设计带Java后端的毕业源码案例是一个综合性的项目,涵盖了移动电商领域的前端用户界面、后台服务架构以及数据存储等多个关键环节。这个项目为学习者提供了实践和理解完整电商系统开发的机会。 ...

    微信小程序springboot基于的成人教育APP的设计与实现论文+答辩ppt.rar

    在实现过程中,考虑到性能和安全性,开发者可能会使用Redis进行缓存管理,提升高并发下的响应速度。同时,对于敏感操作,如用户登录、支付等,需要使用HTTPS协议确保数据传输的安全性。此外,为保证服务的高可用性,...

Global site tag (gtag.js) - Google Analytics