2.1 從App業務邏輯中提煉API接口
  
  業務邏輯思維導圖
  
  功能-業務邏輯思維導圖
  
  基本功能模塊關系
  
  功能模塊接口UML(設計出API)
  
  在設計稿標注API
  
  編寫API文檔
  
  2.2 設計API的要點
  
  根據對象設計API
  
  API的命名
  
  API的安全性
  
  API所返回的數據:禁止返回Null值
  
  圖片的處理:圖片數據庫保存原圖,在App客戶端本地緩存圖片不存在時,按圖片尺寸向服務端請求動態生成。
  
  返回的提示信息:給用戶看的提示和給程序員看的提示。
  
  在線API測試文檔:使用Swagger-UI搭建,按TDD(測試驅動開發)原則進行開發。
  
  在App客戶端啟動時調用一個API獲取必要的初始化信息:比如App版本
  
  關于API的版本升級問題:V2版本的API的Controller必須要繼承V1版本的Controller,V2版本的API只重寫需要改動的API。
  
  2.3 如何選擇合適的數據庫產品
  
  2.3.1 Redis、MongoDB、MySQL讀寫數據的區別
  
  Redis的數據是存放在服務器的內存,當內存用滿了后需要擴容,就只能使用Redis的分布式方案。為了防止斷電或Redis程序重啟造成內容數據的丟失,可調整Redis配置文件,按照一定的策略把數據持久化傳到硬盤。
  
  MongoDB同時使用了硬盤和內存,其使用了操作系統提供的MMAP(內存文件映射)機制進行數據文件的讀寫,MMAP可以把文件直接映射到進程的內存空間中,這樣文件就會在內存中有對應的地址,這時對文件的讀寫是能通過操作內存進行的,而不需要使用傳統的如fread、fwrite文件操作方式。
  
  MySQL的數據是放在硬盤中的。雖然MySQL也有緩存,但MySQL緩存的是查詢的結果,而不是緩存數據。
  
  2.3.2 Redis、MongoDB、MySQL查找數據的區別
  
  Redis的數據是基于“鍵值對”存儲。Redis查找數據,每次都是直奔目標,讀寫速度當然快。
  
  MongoDB和MySQL中查找數據,有兩種模式:知道id或索引,不知道id或索引。前者直奔目標,效率高;后者逐個查找,效率低。
  
  2.3.3 Redis、MongoDB、MySQL適用場景
  
  Redis適用場景:讀寫頻率高的數據、熱點數據。
  
  MongoDB適用場景:網站數據(實時的插入、更新與查詢),大尺寸、低價值的數據,高伸縮性的場景(數十或者數百臺服務器組成的數據庫),存儲地理坐標的數據;不適合高度事務性的系統、傳統的商業智能應用及需要復雜SQL的問題。
  
  MySQL適用場景:事務性的系統(涉及金錢),需要復雜SQL的問題。
  
  2.4 如何選擇消息隊列軟件
  
  2.4.1 為什么使用消息隊列
  
  將一些需要花比較多的時間,而且遲點完成不影響整個任務的完成進度的小任務,放到消息隊列中,可加快后臺請求的響應時間;比如發送郵件、發送短信、推送消息等任務就非常適合放到消息隊列中。同時消息隊列也能把大量的并發請求變成串行的請求,減輕服務器的負擔。
  
  2.4.2 消息隊列的工作流程
  
  App后臺(隊列生產者)把消息推入到消息隊列;
  
  守護進程(隊列消費者)不斷地檢測消息隊列中有沒有新的消息,沒有消息就休息一會兒再檢測消息隊列中有沒有新的消息(這樣做能避免消息隊列占據過多的服務器資源),有消息的話就從消息隊列取出消息,用新的線程處理相關的業務,在主線程中繼續檢測消息隊列是否有新消息。
  
  2.4.3 常見的一些消息隊列產品
  
  RabbitMQ:重量級的消息隊列,適合企業級的開發,其支持大量的協議,比如AMQP、XMPP、SMTP、STOMP;同時RabbitMQ自帶了一個Web監控界面,可方便監控隊列的情況。
  
  Redis:雖然是一個key-value系統,但其也支持隊列這種數據格式,可看作是一個輕量級的消息隊列。在App后臺架構中Redis被廣泛使用,如果把其作為消息隊列,能減少項目中的運維成本。
  
  ZeroMQ:號稱最快的消息隊列,尤其針對大吞吐量的需求場景。
  
  ActiveMQ
  
  2.5 使用分布式服務實現業務的復用
  
  隨著業務不斷增加,后臺系統由一個單一的應用慢慢膨脹為一個巨無霸系統,它聚合了大量的應用和服務,各個模塊之間由很多功能重復實現,造成了開發、運維、部署的麻煩。
  
  2.5.1 巨無霸系統的危害
  
  維護上的麻煩
  
  代碼管理上的不方便
  
  數據庫連接資源的耗盡
  
  2.5.2 遠程服務的優點
  
  把重復實現的模塊獨立部署為遠程服務,新增的業務調用遠程服務所提供的功能實現相關的業務,不依賴于里面具體的代碼實現。當遠程服務里面的業務需要發生變化時,只要接口的傳入參數和返回值保持不變,就不會影響到調用這些遠程服務的業務。
  
  2.5.3 遠程服務的實現
  
  REST
  
  REST(Representational State Transfer),即表述性狀態傳遞,它是一組架構約束條件和原則。滿足這些約束條件的原則的應用程序或設計就是RESTful。
  
  REST架構的特點:每一個URI代表一種資源;客戶端和App后臺之間,傳遞這種資源的某種表述;客戶端通過GET、POST、PUT、DELETE等HTTP動詞,對App后臺資源進行操作,實現“表述性狀態傳遞”。
  
  REST設計原則中最重要的是請求是無狀態的。
  
  RPC
  
  RPC(Remote Procedure Call),即遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
  
  開源的RPC庫
  
  阿里巴巴開源Dubbo,其是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程調用服務和SOA服務治理方案。
  
  當當網在Dubbo的基礎上實現了如下的新功能,并將其命名為Dubbox。
  
  支持REST風格遠程調用(HTTP+JSON/XML)。
  
  支持基于Kryo和FST的Java高效序列化實現。
  
  支持基于嵌入式Tomcat的HTTP remoting體系。
  
  將Dubbo中Spring由2.x升級到目前常用的3.x版本。
  
  將Dubbo中的Zookeeper客戶端升級到最新的版本,以修正老版本中包含的bug。
  
  2.6 搜索技術入門
  
  常見的開源搜索軟件介紹
  
  復制代碼
  
  <?xml version="1.0" encoding=www.venkeng.com/ "utf-8" ?>
  
  <configuration>
  
  <configSections>
  
  <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration"/>
  
  </configSections>
  
  <unity>
  
  <typeAliases>
  
  <typeAlias alias="IEarPhone" type="Xu.UnityDemo.Interface.IEarPhone,Xu.UnityDemo" />
  
  <typeAlias alias="IPhone" type=www.qwert888.com"Xu.UnityDemo.Interface.IPhone,Xu.UnityDemo" />
  
  <typeAlias alias="NubiaPhone" type="Xu.UnityDemo.Model.NubiaPhone,Xu.UnityDemo" />
  
  <typeAlias alias="MiPhone" type="Xu.UnityDemo.Model.MiPhone,Xu.UnityDemo" />
  
  <typeAlias alias="NubiaEarPhone" type="Xu.UnityDemo.Model.NubiaEarPhone,Xu.UnityDemo" />
  
  <typeAlias alias="MiEarPhone" type="Xu.UnityDemo.Model.MiEarPhone,Xu.UnityDemo" />
  
  </typeAliases>
  
  <containers>
  
  <container name="IOCcontainer">
  
  <type type="IPhone" mapTo="MiPhone" name="Mi"></type >
  
  <type type="IPhone" mapTo="NubiaPhone"></type >
  
  <type type="IEarPhone" mapTo="NubiaEarPhone"></type >
  
  </container>
  
  </containers>
  
  </unity>
  
  </configuration>
  
  復制代碼
  
    主要用到兩個節點<typeAlias>和<type>。<typeAlias>節點的alias是別名在<type>節點中的type使用,type是“命名空間+對象名,所在程序集名稱”。<type>節點的type是“需要映射的對象”mapTo是“映射的目標對象”name是“標識名”在多個類繼承同個接口的時候區分使用。其余的節點如圖Unity配置文件節點圖。
  
  代碼如下:
  
  復制代碼
  
  ExeConfigurationFileMap fileMap =www.yunshengyule178.com new ExeConfigurationFileMap();
  
  fileMap.ExeConfigFilename www.fengshen157.com/= Directory.GetCurrentDirectory() + "/Config/UnityIocConfig.xml";
  
  Configuration configuration =www.bais7.com ConfigurationManager.www.mhylpt.com/ OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
  
  UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
  
  //獲取特定配置節下已命名的配置節<container name="IOCcontainer">下的配置信息
  
  section.Configure(_container, "IOCcontainer");
  
  復制代碼
  
  五、三種依賴注入
  
  1、構造函數注入
  
  構造函數注入是最常用的一種注入方式,如下:
  
  復制代碼
  
  private IPhone _iPhone;
  
  private IUnityContainer _container;
  
  public ValuesController(www.yisengyule.com IUnityContainer container, IPhone iPhone)
  
  {
  
  _container = container;
  
  _iPhone = iPhone;
  
  Lucene
  
  Solr
  
  ElasticSearch
  
  Sphinx
  
  CoreSeek
  
  2.7 定時任務
  
  Linux定時任務Crontab
  
  Java定時任務框架Quartz

转载于:https://www.cnblogs.com/qwangxiao/p/10688027.html

《App后台开发运维与架构实践》第2章 App后台基础技术相关推荐

  1. 《App后台开发运维与架构实践》第3章 App后台核心技术

    2019独角兽企业重金招聘Python工程师标准>>> 3.1 用户验证方案 3.1.1 使用HTTPS协议 HTTPS协议是"HTTP协议"和"SSL ...

  2. 《App后台开发运维与架构实践》第4章 Linux系统

    2019独角兽企业重金招聘Python工程师标准>>> 4.2 常用的命令 4.2.1 全面了解系统资源情况--top top命令是Linux下常用的性能分析工具,能够实时显示系统中 ...

  3. Linux 后台开发运维人员常用的Linux命令汇总

    一.文件管理 基础指令的一般格式: 命令名称 [操作选项] [操作对象] ls:是列出指定目录下的内容及其相关属性信息.默认状态下,ls命令会列出当前目录的内容. ls常用的操作选项 -l:查看目录中 ...

  4. 开发运维效率提升 80%,计算成本下降 50%,分众传媒的 Serverless 实践

    作者:吴松 本文总结于分众传媒研发总监吴松在阿里云云原生实战峰会上的分享,从三个方面讲述了对 Serverless 技术的探索. 分众传媒的业务现状 分众传媒的业务场景很简单,就是广告主买量,然后进行 ...

  5. Redis开发运维实践问题处理只内存检查

    8.3.1 系统内存查看 script/下的memstat.sh或者ps_mem.py都可以查看系统的内存情况,两个工具都需要root权限. 8.3.2 系统swap内存查看 #!/bin/bash ...

  6. Redis开发运维实践上线部署规划之持久化设置

    5.4 持久化设置 RDB和AOF两者毫无关系,完全独立运行,如果使用了AOF,重启时只会从AOF文件载入数据,不会再管RDB文件.在配置上有三种选择:不持久化,RDB,RDB+AOF.官方不推荐只开 ...

  7. 首次公开!阿里搜索中台开发运维一体化实践

    阿里妹导读:2015年底,阿里宣布启动阿里巴巴集团中台战略.战略定义为:构建符合DT时代的更具创新性.灵活性的"大中台.小前台"组织机制和业务机制.其中,前台作为一线业务,更敏捷更 ...

  8. visual studio 设计器不显示_面向国际市场的装置开发运维软件设计与实现

    南京南瑞继保电气有限公司的研究人员陈宏君.张磊.徐睿.曾凯.刘坤,在2019年第3期<电气技术>上撰文,分析了面向国际市场的用户软件现状与问题,介绍了新一代控制保护平台PCS-S系列装置配 ...

  9. 什么是devops开发运维_为什么假设驱动的开发是DevOps的关键

    什么是devops开发运维 DevOps的定义,由Donovan Brown提供 是" 人员 , 流程和产品的结合,以实现向客户不断交付价值 . "它强调了持续交付价值的重要性. ...

最新文章

  1. python tar.gz格式压缩、解压
  2. 【leetcode】7.反转整数(Reverse Integer)
  3. 低版本不能使用php 命令,创建软链接
  4. JMeter重要知识点汇总
  5. JS:javaweb——a标签实现跳转并打开新窗口
  6. linux运行脚本文件python,Python脚本:Linux自动化执行Python脚本
  7. Z表数据EXCEL导入
  8. 基于使用AspectJ实现AOP,注解AOP开发(基于xml文件、基于注解)
  9. 删除.svn文件夹方法(转)
  10. angularjs 表单验证 和 页面初始化闪烁
  11. 将堆栈异常返回前端显示
  12. button jsp隐藏_关于在同一JSP页面通过隐藏域传值的问题?
  13. enum枚举类型 的用法
  14. 鸿蒙是安卓改名,EMUI更名为鸿蒙,这几个问题的答案马上就能揭晓!
  15. 一键搞定JavaEE应用,JTM1.0(JRE+Tomcat+MySQL绿色运行环境)
  16. ExtJS 教程汇总
  17. Hyper-v功能介绍和操作演示
  18. word2vec与相关应用
  19. android输入法服务,Android调用系统输入法
  20. SaaS 前世今生:老树开新花

热门文章

  1. java 复制对象_Java程序员必备:序列化全方位解析
  2. Problem01 不死神兔
  3. go语言基础之格式化输出
  4. hadoop2 Ubuntu 下安装部署
  5. tableview直接滚动至最后一行
  6. 牛客网未通过代码---
  7. c# 错误 两个输出文件名解析为同一个输出路径
  8. 【PHP入门到精通】:Ch05:字符串处理
  9. jQuery对checkbox的操作(转载)
  10. .Net读取xlsx文件Excel2007