APP后台基础技术

APP后台基础技术

1.从业务逻辑中提炼API

六个阶段:

业务逻辑思维导图(结构关系列出来、整理相同的元素)

功能—业务逻辑思维导图(业务逻辑、功能模块,功能模块实现一对多)

基本功能模块关系(任何事之间的关系)

功能模块接口UML(整理业务和工能模块确保耦合度正确)

在设计稿标注API(APP后台开发人员标注那个界面调用哪个API)

编写API文档(API接口管理网站:www.sosoapi.com)

2.设计API的要点

根据对象设计API,防止UI一直改变,API随之改变。维护成本太高。

API命名需要:望名知意。

API的安全性要保证

APP后台API返回数据的正确值和空值的数据类型必须一致,APP客户端必须使用全局函数处理返回的数据,缺少的数据自动补全,减少APP闪退次数。同样,数据库中的数据不允许使用NULL,所有字段都有默认值。

图片处理:APP客户端本地缓存图片,缓存不存在时请求API。APP客户端通知服务器所需要的尺寸,服务器动态生成并缓存。

(CDN机制:eg:http://www.baidu.com/img/bdlogo.gif?w=70&h=70)

通常的返回信息只返回信息码,提示文字由客户端决定。如果要返回文字信息,则提示用户:信息友好,提示程序员:信息专业。

APP客户端一般启动时都要调用API获取必要的初始化信息。

若API版本升级,一般会全部升级API版本,为了避免同一个APP客户端调用不同版本API,新版本的API的Controller必须继承前一版本。只需重写部分API。仍需要在API测试文档中详细标明返回内容。

3.选择合适的数据库

Redis、MongoDB、MySql

读写数据之间的区别:

Redis:存放在服务器内存,内存满了只能使用Redis的分布式方案。调整Redis的配置文件把数据持久化到硬盘。

MongoDB:同时使用了硬盘和内存,使用操作系统提供的MMAP(内存文件映射)机制进行数据读写。

MySQL:MySql缓存的是查询结果而不是缓存数据。

查找数据的区别:

Redis:数据基于键值对,查找速度十分高。

MongoDB&&MySql:每组数据都有一个Id或者索引。知道Id或者索引,直奔目标,速度十分快;不知道Id或者索引,需要逐个查找,效率较低。

适用的场景:

Redis:键值对(Key-Value)放在内存。So,存储数据成本高。读写数据时,必须知道数据的键。(eg:API中附带了用户身份信息,身份信息适合存放在Redis,因为验证用户信息是频率非常高的操作)

MongoDB:适用于网站数据、大尺寸低价值数据、高伸缩性场景、存储地理坐标的数据(LBS应用)。不适用于高度事务性系统(MongoDB不支持事物)、传统的商业智能应用、需要SQL的问题。

MySql:事务性系统、需要复杂的Sql的问题。

4.选择消息队列软件

后台系统发现完成某些小任务需要花费很多时间,迟点完成并不影响整个任务的完成进度,就把这些小任务交给消息队列。消息队列能把大量的并发请求变成串行的请求,减轻服务器的负担。例如:发送邮件、发送短信、推送消息等任务。

三个角色:队列服务端、队列生产者、队列消费者。

工作流程:充当生产者的APP后台把消息推入到消息队列,充当消费者的守护进程检测是否有消息,没有就休息一会,一会再检测(防止消耗太多资源)。有新消息,用新的线程处理相关的业务,主进程继续检测是否有消息

常见消息队列的产品:RabbitMQ(企业级),Redis(广泛使用),ZeroMQ(最快的消息队列),ActiveMQ(代理人、点对点实现队列)

5.使用分布式服务实现业务的复用

系统中聚合了大量的应用和服务,模块间有很多功能重复实现,开发、运维、部署很麻烦。

巨无霸系统的危害:维护麻烦、代码管理不便、数据库链接资源耗尽。

远程服务的优点:把重复实现的模块独立部署为远程服务,新增业务调用远程服务,不依赖具体代码实现相应功能。业务发生变化保持传入接口和返回值不变。

实现远程服务:REST、RPC、开源RPC库

REST:(REpresentational State Transfer,表现层状态转化),每一个URL代表一种资源,客户端和后台之间传递这种资源的某种表现层:(GET、POST、PUT、DELETE),通过这4个HTTP动词,对APP后台资源进行操作。

RPC:(Remote Procedure Call Protocol):远程过程调用协议,是一种通过网络从远程计算机程序请求服务,不需要了解底层网络技术的协议。

过程:客户端通过接口传送参数至网-->服务端通过对外接口通过网络接受参数-->服务端把参数传递到实现函数-->实现相关功能、返回数据返回到对外接口并传至网络-->客户端接受网络返回的数据。

开源RPC库:

Hprose(http://hprose.com/)简单功能强大

Dubbo:分布式服务框架,提供高性能和透明化的RPC远程调用服务和SOA服务治理方案。

6.初识搜索技术

数据太多,很容易数据库就堵了。

搜索原理:实现搜索的关键,就是分词和倒序索引。

知道数据每行有多少关键字,并且建立映射表。查关键字时,只要查找这个映射表。

其中关键字要看使用者的需求。并且需要包含所有词语或者句子的所有词典,分析数据中的关键字。建立映射表,把每个关键字出现在哪一行记录下来就是建立倒序索引。详细参考《这就是搜索引擎:核心技术详解》

常见开源的搜索软件:(会使用搜索软件的API)

Lucene:一套用于全文检索和搜寻的开源程式库(为软件开发人员提供简单易用工具包)

Solr:比Lucene更为丰富的查询语言,实现可配置、可扩展、对查询进行优化。通过Http请求搜索引擎服务器并提交一定格式的Xml文件,生成索引。

ElasticSearch:分布式多用户的全文搜索引擎。

Sphinx:基于SQL的全文检索引擎。为PHP、Python、Perl、Ruby等脚本语言设计搜索API。为MySql设计了一个存储引擎插件。

CoreSeek:中文检索软件,配置简单。性能高效,整合了Sphinx和中文分词,可以快速完成搜索模块的开发。(两个核心模块:Indexer:负责从MySql拉取数据源,把数据源分词、建立索引;Search:搜索模块)

7.定时任务

Linux定时任务Crontab:

使用Crontab-e,创建定时任务。定时任务写入到文件中,用Crontab编辑能检查语法错误。

在后台管理各式各样的定时任务:

需要引入新的定时任务框架:Java下的Quartz或者Python下的APScheduler。

APSchedule实现功能:通过RAM、MySql、MongoDB文件,持久化存储定时任务。支持秒级的定时任务。支持基于日期,固定时间间隔和Crontab类型的定时任务。

easy-install安装: easy-install apscheduler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值