1.1什么是SOA架构?

  SOA( Service Oriented Architecture)是一种面向服务的分布式架构,将每个实现特定功能的工程拆分为服务层和表现层。服务层负责处理业务逻辑,对外提供服务接口。表现层负责处理与前端的交互,具体业务逻辑只需调用服务层发布的接口。

  面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。

  SOA是把服务分成了若干,表现层分成了若干。表现层和服务层没有耦合关系,表现层可以用任意一个服务层,开发的时候,仅仅是增加服务层和Web层2个工程,并不会把服务层和Web层当成一个整个工程,它们是独立的。

  1.2 Dubbo

  目前较为流行的SOA 架构开发方式是使用Dubbo 技术。在SOA 架构中,每个功能模块都会发布服务或调用服务,那么就需要有一 个服务中心对各个服务进行统一的资源调度与治理,Dubbo 就是这个服务中心的管理工具。 Dubbo 对 Spring 有很好的支持,只需在 Spring 配置文件中进行相关的配置即可使用。 Dubbo 中主要有服务提供者、服务消费者和注册中心三个角色,还有一个监控中心对每次服务调用进行监控与统计。服务提供者向注册中心发布自己提供的服务,服务消费者向注册中心订阅自己所需的服务,服务中心将服务提供者提供的服务及地址列表给服务消费者,即实现了服务调度。在项目中,服务层工程作为服务提供者,需要通过配置向注册中心暴露服务的接口。表现层工程作为服务消费者,需要通过配置从注册中心引用服务接口。注册中心推荐使用 Zookeeper,负责服务的注册与查找。

2.基于SOA架构的图书商城

  图书商城系统可以分为后台系统、前台系统、登陆/注册系统、搜索系统,每个子系统运行在各自的服务器上,互相之间通过调用接口实现整个网站的功能。商城SOA架构图如图所示:

  2.1后台系统

  后台系统的主要使用者为商家,提供图书管理、订单管理等功能,图书管理又可分为图书分类和图书基本管理。后台系统提供对图书、图书分类、订单增、删、改、查的功能。使用 FastDFS 作为图片服务器供图书图片的上传下 载。

  2.2前台系统

  前台系统的主要使用者为买家,买家在前台系统可以进行登陆注册、览图书、查看购物车、提交订单等,搜索图书等,前台系统相较于后台系统会有更高的访问量与并发量,涉及大量数据库操作时会很耗费时间。因此可以使用非关系型数据库Redis 作为业务层与数据层之间的缓存。Redis 作为非关系型数据库,比传统的关系型数据库效率要高出很多,处理大量数据时性能有明显优势。业务层需要数据时首先访问Redis,如果有数据就直接返回,如果没有再向关系型数据库中查找数据,然后返回给业务层并向Redis 中添加数据缓存。

  2.3搜索系统

  搜索系统给前台系统提供接口,为用户提供图书查找的服务。搜索功能需要对用户输入的关键词进行复杂的查询,使用传统的关系型数据库查询效率较低,针对这个问题,我们可以使用 Solr(实现快速搜索的搜索引擎系统)技术对数据进行快速索引。

  在使用前需要为Solr 配置中文解析器,并设置分词方法与图书信息的搜索域。然后将图书信息导入到Solr 索引库中,用户在搜索框中输入关键词开始搜索,服务端在Solr 索引库中根据事先设置的分词以及搜索域进行查找,有图书信息与之匹配将返回给浏览器显示。

  2.4登陆系统

  将登陆系统独立出来可以为所有用户提供一个统一的接口。用户信息在数据库中有一个字段来标识用户身份,输入用户名密码后,服务端会在数据库中进行比对,若是卖家,则进入后台系统,若是买家,则进入前台系统。

  

最新文章

  1. Linux文件目录权限总结
  2. (JavaScript 2.0: The Complete Reference, Second Edition)javascript 2.0完全手册第二版 翻译说明
  3. NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对
  4. matplotlib 初使用
  5. 谈JAVA的内存回收(一)
  6. Android性能分析工具介绍
  7. 迁移/home目录至新硬盘分区总结--无备份情况下
  8. git常用命令2
  9. mfc修改应用程序外观
  10. project文件问题
  11. Python的变量参数
  12. SpringQuartz 实现定时任务调度
  13. 移动端web总结
  14. OpenLiveWriter.exe已停止工作---解决办法
  15. php分词工具scws
  16. MyBatis进阶(三)
  17. Java知多少(52)内置异常
  18. leetcode1006
  19. python基于pillow库的简单图像处理
  20. WebService 工作原理及实例教程

热门文章

  1. 关于慕课网《使用vue2.0实现购物车和地址选配功能》的总结
  2. 关于varchar的总结
  3. Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
  4. ffmpeg静态库Windows版本
  5. C#的语音识别 using System.Speech.Recognition;
  6. flutter 隐藏返回按钮 自定义返回按钮
  7. python学习笔记:(十一)模块
  8. Java基础面试题集(二)
  9. elasticsearch mappings之dynamic的三种状态
  10. python指定pip安装源