功能分析

  在整个微服务架构的搭建过程中,我们需要做的第一步就是对服务进行拆分,将一个完整的系统模块化,通过对各个模块互联,共同完成一个系统的工作。既然要做到模块化,那么必须明白你的系统的需求到底是什么,即你要做的这个系统需要实现哪些功能,明确了功能以后,再对功能进行划分,将具有相似作用的功能划分为一个模块,最后再决定需要用什么样的方式去实现你的模块,最后才是正式开始敲代码。

  在我们的个人博客中,我将网站划分为了以下几个部分:

  • 主页

  主页里面自然需要做一些概况展示,例如:文章总数、访问总数、评论总数、最近文章、最近留言、最热文章、作者推荐等,可以说主页里面跨越了多个模块的访问,那么简单的实现方式就是通过多个Ajax去访问不同的模块来进行动态加载数据。

  • 技术随笔

  技术随笔中自然是要有文章列表,通过加载文章列表,浏览者可以选择自己感兴趣的文章然后进行查看详情,即文章详情页面。在技术随笔页面,也应该包含最热文章和推荐文章,这样可以方便浏览者进行选择。

  • 文章详情

  文章详情重点展示的是文章的内容以及文章评论。

  • 我的书屋

  该模块可以说与技术随笔模块实现方式完全一致,也拥有书籍列表、最热书籍、推荐书籍、书籍详情以及评论,所以可以将它们归纳为一个模块,只需要在Type列进行标记,即可分开。

  • 留言板

  这里对每个浏览网站的用户提供了留言功能,针对每一条留言,可以有多条回复,对于这种存储结构,用Mo'ngodb存储最为适合。

  • 网站管理

  这部分包含了留言管理、文章发布等功能,这部分模块自然就需要有权限控制,只有网站管理员才能进行文章发布、留言管理,而一般的用户只有留言网站的权限。

  • 身份认证

  用于识别用户的身份以及相应权限,为了满足网站扩展性以及迎合目前趋势,身份认证授权我们当然是采用Identity Server4来实现。

  模块划分

  有了上面的功能的分析,我们接下来可以进行服务划分了。

  • Ocelot网关服务

  网关服务用于向外提供一个统一的访问地址,而在内部进行请求的转发,你需要在json文件中设置它的上游服务器和下游服务器,这样,所有对上游地址的请求,都会被转发到下游服务器,具体情况等到搭建Ocelot网关服务器的时候再进行详细解释,现在只需要明白,Ocelot的作用就是对外提供一个统一的地址,可以是你的域名,然后它会将请求按配置转发到多个节点上。

  • IdentityServer4登陆服务

  该服务主要用于提供身份认证和授权,即OAuth2+OpenID Connect,在用户访问一些接口时,如留言等,会要求身份认证,这是就需要进行登陆处理,当验证完毕后,会获得access-token和id-token,然后可以用access-token对接口访问,id-token代表了用户身份。

  • 文章/书籍服务

  之前说过,文章和书籍服务实现方式完全一致,包括文章/书评发布、评论等,所以将它们归为一个模块。注意,这部分的文章/书评的发布和删除,必须是管理员权限才能管理。

  • 留言服务

  留言服务归为一个单独的模块,选择Mongodb存储留言列表,留言服务与文章书籍服务交互甚多,引入HttpClient后,一定要用Polly库保证服务的稳定性。留言删除必须是管理员权限才能管理。

  • 日志服务

  网站日志,比如网站有什么异常啊,或者记录哪个接口延时较大等,以便后续改进,需要注意这部分权限必须为系统管理员才能访问。

  • RabbitMQ服务

  微服务之间的消息难免需要进行通信,例如,当其他服务发生了异常,需要用日志服务来进行异常记录,但是两个服务不在一个节点上,这种情况就需要使用我们的RabbitMQ来传递异常消息。其他服务利用通过EventBus投递消息,日志服务只需要接收消息进行存储即可。

  最后,大家都知道Redis非常适合用于做网站浏览量统计、热度统计等,所以可以使用Redis来为主页需要显示的几个部分提供支撑。

  系统架构

  整个系统架构如下图所示:

  图中,需要注意以下几点:

  1. 微服务之间最脆弱的部分就是服务之间的Http调用,所以需要用Polly库保证安全;
  2. 虽然查询数据库的框架其实效率差不多,但是我还是喜欢原生的SQL,在ADO和Dapper中,还是决定用Dapper,因为想学一下。。。

  今天就先这样吧,下一篇会先把数据库的表间关系设计好,第一次写多多包涵。

ASP.NET Core微服务+Tabler前端框架搭建个人博客2--系统架构的更多相关文章

  1. ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话

    写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...

  2. (6)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- AOP框架

    AOP 框架基础 要求懂的知识:AOP.Filter.反射(Attribute). 如果直接使用 Polly,那么就会造成业务代码中混杂大量的业务无关代码.我们使用 AOP (如果不了解 AOP,请自 ...

  3. ASP.NET Core 微服务初探[1]:服务发现之Consul

    ASP.NET Core 微服务初探[1]:服务发现之Consul   在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件 ...

  4. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  5. webapi框架搭建系列博客

    webapi框架搭建系列博客 webapi框架搭建-创建项目(一) webapi框架搭建-创建项目(二)-以iis为部署环境的配置 webapi框架搭建-创建项目(三)-webapi owin web ...

  6. (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架

    创建简单的熔断降级框架 要达到的目标是: 参与降级的方法参数要一样,当HelloAsync执行出错的时候执行HelloFallBackAsync方法. public class Person { [H ...

  7. (8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)

    说到现在现有微服务的几点不足: 1) 对于在微服务体系中.和 Consul 通讯的微服务来讲,使用服务名即可访问.但是对于手 机.web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务 ...

  8. (5)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 熔断降级(Polly)

    一. 什么是熔断降级 熔断就是“保险丝”.当出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作给系统造成“雪崩”,或者大量的超时等待导致系统卡死. 降级的目的是当某个服务提供者发 ...

  9. (1)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型

    开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点: 1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块: 2)系统耦合性强,一旦其中一个模块有问题, ...

随机推荐

  1. thymelead入门 git地址在文档最后

    流程:##### 流程###### 1:pom添加依赖 <dependency> <groupId>org.springframework.boot</groupId&g ...

  2. PYTHON基础入门(内置函数、推导式)学习

    **内建函数**1.通过使用dir()函数可以列出所具备的方法 例:num = 10 dir(num) 例:myList = [1,2,3,4,5,6] dir(num)2.通过使用help()函数可 ...

  3. Java中子类对象初始化的过程

    Java中的继承机制看似简单,实际上包含了很多细节.最近在刷题过程中屡屡跳坑,于是自己仔细再学习了一下Java中子类初始化的细节,与大家分享. class Father { Father(){}; } ...

  4. Ajax基本语法

    案例代码: $(function(){ $('#send').click(function(){ $.ajax({ type: "GET", url: "test.jso ...

  5. Linux学习---类型修饰符

    auto eg:aoto int a;   默认情况--------->分配的内存可读可写的区域. register eg:register int a; 限制变量定义在寄存器上的修饰符 定义一 ...

  6. MySQL系统变量 sql_mode 详解

    转载自:http://tech.it168.com/a2012/0822/1388/000001388401_all.shtml MySQL数据类型:SQL_MODE设置不容忽视 SQL_MODE可能 ...

  7. 恢复git撤销commit的代码

    使用git reset --hard 是将磁盘文件也删除 时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支 ...

  8. 大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)

    大众点评selfxss结合两个csrf变废为宝 漏洞不值钱,但还是蛮好玩的 漏洞信息 类型:存储型xss 场景:收藏商户后,去已收藏的商户列表可以给指定商户添加tag(与下文html标签区别) 漏洞限 ...

  9. Exp1 PC平台逆向破解----20164325 王晓蕊

    前言:实验中用到的知识 JE:条件转移指令,如果相等则跳转: JNE:条件转移指令(等同于“Jump Not Equal”),如果不相等则跳转: JMP:无条件跳转指令.无条件跳转指令可转到内存中任何 ...

  10. 7 week work

    Dom和Bom的起源.方法.内容.应用. Dom:起源:首先听到Virtual DOM这个概念应该来自于React,并且在不了解时觉得这个概念是一个逼格特别高的词.其实任何技术的诞生都是有相应的历史的 ...