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登陆系统

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

  

基于SOA的图书商城系统分析的更多相关文章

  1. JAVAEE——宜立方商城02:服务中间件dubbo、工程改造为基于soa架构、商品列表实现

    1. 学习计划 第二天:商品列表功能实现 1.服务中间件dubbo 2.工程改造为基于soa架构 3.商品列表查询功能实现. 2. 将工程改造为SOA架构 2.1. 分析 由于宜立方商城是基于soa的 ...

  2. 基于SSH的网上图书商城-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 技术:Java:JSP:JDBC,struts2,spring,hibernate数据库: mysqlweb ...

  3. 基于SOA的高并发和高可用分布式系统架构和组件详解

    基于SOA的分布式高可用架构和微服务架构,是时下如日中天的互联网企业级系统开发架构选择方案.在核心思想上,两者都主张对系统的横向细分和扩展,按不同的业务功能模块来对系统进行分割并且使用一定的手段实现服 ...

  4. springboot+bootstrap实现图书商城管理(大三下学期课程设计)

    在csdn上记一次自己的课程设计过程(已经实习两个月了.感觉这个很容易做.支付可能需要多花点时间.): 在此框架基础之上权限认证管理设置成功:https://blog.csdn.net/weixin_ ...

  5. 基于SOA分布式架构的dubbo框架基础学习篇

    以需求用例为基,抽象接口,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段 ...

  6. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  7. 基于 SOA 的组件化业务基础平台

    业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台.软件基础架构平台之间的交互与管理问题”.操作系统平台解决了“应用软件系统与硬件之间的交互与管理问题” ...

  8. 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇

    开篇 系统架构的文章,准备在这段时间好好的梳理和整理一下,然后发布基于AgileEAS.NET平台之上的企业级应用架构实践,结合具体的案例来说明AgileEAS.NET平 台之上如何进行系统的逻辑架构 ...

  9. Javaweb实现的优优图书商城(含源码)

    原文地址:http://www.cnblogs.com/liaoyu/p/uushop.html 源码地址:https://github.com/liaoyu/uushop 贴出一个大学时做的小项目, ...

随机推荐

  1. 使用layui异步请求上传图片在tp5.1环境下出现“请对上传接口返回json”的错误的解决方法

    正常情况下返回json数据使用return json(); 但是使用layui会报错,然后想到了使用json_encode()包装一下用一个变量接收后,再使用return();返回接收json格式的变 ...

  2. oracle存储过程错误跟踪

    1.首先创建用于保存错误信息的表 1 2 3 4 5 6 7 8 CREATE TABLE TBL_PROC_ERRMSG (   BIZ_CODE VARCHAR2(50),   ERR_LINE ...

  3. leetcode-easy-listnode-237 Delete Node in a Linked List

    mycode # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # sel ...

  4. leetcode227 基本计算器

    1先利用符号栈转化为逆波兰表达式,并添加‘,’作为一个数字的结尾: 2然后利用数字栈计算逆波兰表达式的值: class Solution { public: int calculate(string ...

  5. kotlin之字符串

    在kotlin 中 使用String 表示字符串类型,如下二类字符串 一 普通字符串 var s1 = "hello world" 二 保留原始格式的字符串 var s2 = &q ...

  6. ListView 中如何优化图片?

    图片的优化策略比较多.1.处理图片的方式:如果 ListView 中自定义的 Item 中有涉及到大量图片的,一定要对图片进行细心的处理,因为图片占的内存是ListView 项中最头疼的,处理图片的方 ...

  7. Web自动化测试—— Selenium+Python Windows环境搭建

    环境搭建前的准备: 1.到Python官网下载Python安装包:https://www.python.org/ 如果不能访问,可以试试下面的解决办法: a).安装VPN网络连接工具,推荐用Green ...

  8. [flask-sqlalchemy]倒序查询结果

    按创建时间倒序查询测试用例 >>> a= TestCase.query.order_by(TestCase.create_time.desc()).first() >>& ...

  9. 利用jquery的淡入淡出函数(fadeIn和fadeOut)--实现轮播

    首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果.利用jquery的淡入淡出函数(fadeIn和fadeOut).废话也不多说,边上代码 ...

  10. Python pymysql对数据库的基础操作

    示例数据库名demo,表名info select * from info; 查看该表数据 +----+-------+--------+-----+---------------------+---- ...