BasKet

DDD领域驱动设计理论篇

余生长醉 提交于 2020-11-26 09:52:43
一、Why DDD?   在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践。在微服务的学习中,有一本微软官方出品的《 .NET微服务:容器化.NET应用架构指南 》是我们学习的葵花宝典,纵观微软官方放出来的Demo项目的演变历史(可以参见杨晓东《 我眼中的ASP.NET Core微服务 》一文):   (1)PetShop:WebForm 的示例程序。典型的三层架构风格的应用程序。   (2)MusicStore: 针对于 MVC3~5 框架和 EF 的一个示例程序。无明显架构风格。   (3)eShop: 针对于 ASP.NET Core 的示例程序,它是一个 REST架构风格的应用程序。   分析其架构风格的转变可以看出,现代应用程序架构已经从单一的传统风格架构(N-Layered)转向了多种混合风格架构(Mixed-Style),像最新的eShopOnWeb/Container项目就包含了以下多种架构风格:   我们可以看到,其中主要包括了以下两种架构风格(虽然看起来好像有四种): 基于数据驱动的CRUD微服务 (比如上图中Catalog Microservice和Basket Microservice) 基于DDD的微服务(比如上图中的Ordering Microservice 订单微服务)   目前

[Elasticsearch]4.可伸缩性解密:集群、节点和分片

烂漫一生 提交于 2020-08-17 09:45:43
可伸缩性解密:集群、节点和分片 更新连载中...请关注 Scalability and resilience: clusters,nodes, and shard Elasticsearch支持根据需要进行扩缩容.这得益于Elasticsearch是原生支持分布式的.可以通过往机器中添加服务器(节点)的方式扩大集群容量从而存储更多数据.Elasticsearch会自动的均一些数据和计算任务给新加入的数据.甚至不需要应用程序参与,Elasticsearch完全知道该怎么把数据均衡到多个节点并且提供良好的可伸缩性和高可用性.集群的节点越多这种操作越顺滑越无感. 就是这么丝滑,堪比丝袜! Elasticsearch is built to be always available and to scale with your needs. It does this by being distributed by nature. You can add servers (nodes) to a cluster to increase capacity and Elasticsearch automatically distributes your data and query load across all of the available nodes. No need to

阮一峰大神ECMAScript 6 入门|笔记整理

三世轮回 提交于 2020-08-15 15:19:04
阮一峰大神ECMAScript 6 入门:https://es6.ruanyifeng.com/ 大家要是看不惯这边的排版,可以去我的语雀看看,语雀真的绝 https://www.yuque.com/isremya/vqgp35 let 和 const 命令 let声明的变量只在它所在的代码块有效。 变量 i 是 var 命令声明的,在全局范围内都有效,所以全局只有一个变量 i 。 变量 i 是 let 声明的,当前的 i 只在本轮循环有效,所以每一次循环的 i 其实都是一个新的变量 另外, for 循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。 for (let i = 0; i < 3; i++ ) { let i = 'abc' ; console.log(i); } // abc // abc // abc ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 即不存在变量提升。 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。 let 不允许在相同作用域内,重复声明同一个变量。 function func(arg) {

eShopOnContainers 知多少[11]:服务间通信之gRPC

删除回忆录丶 提交于 2020-08-15 11:32:04
引言 最近翻看最新3.0 eShopOncontainers源码,发现其在架构选型中补充了 gRPC 进行服务间通信。那就索性也写一篇,作为系列的补充。 gRPC 老规矩,先来理一下gRPC的基本概念。gRPC是Google开源的RPC框架,比肩dubbo、thrift、brpc。其优势在于: 1. 基于proto buffer:二进制协议,具有高性能的序列化机制。相较于JSON(文本协议)而言,首先从数据包上就有60%-80%的减小,其次其解包速度仅需要简单的数学运算完成,无需复杂的词法语法分析,具有8倍以上的性能提升。 2. 支持数据流。 3. 基于proto 文件:可以更方便的在客户端和服务端之间进行交互。 4. gRPC语言无关性: 所有服务都是使用原型文件定义的。这些文件基于protobuffer语言,并定义服务的接口。基于原型文件,可以为每种语言生成用于创建服务端和客户端的代码。其中protoc编译工具就支持将其生成C #代码。从.NET Core 3 中,gRPC在工具和框架中深度集成,开发者会有更好的开发体验。 gRPC 在 eShopOncontainers 的应用 首先来理一下eShopOncontainers 中服务间同步通信的技术选型,主要还是是基于HTTP/REST,gRPC作为补充。 在eShopOncontainers中Ordering API

java队列——queue详细分析

為{幸葍}努か 提交于 2020-08-09 12:35:38
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。 Queue的实现 1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口   内置的不阻塞队列: PriorityQueue 和 ConcurrentLinkedQueue   PriorityQueue 和 ConcurrentLinkedQueue 类在 Collection Framework 中加入两个具体集合实现。   PriorityQueue 类实质上维护了一个有序列表。加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。   ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列。并发访问不需要同步。因为它在队列的尾部添加元素并从头部删除它们,所以只要不需要知道队列的大 小,       ConcurrentLinkedQueue 对公共集合的共享访问就可以工作得很好。收集关于队列大小的信息会很慢,需要遍历队列。 2)实现阻塞接口的:  

JS设计模式之MODULE(模块)模式

▼魔方 西西 提交于 2020-04-10 08:55:23
9.2Module (模块)模式 通常能够帮助我们清晰地分离和组织项目中的代码单元 js 中实现模块的方法 1 》对象字面量表示法 2 》 Module 模式 3 》 AMD 模式 4 》 CommonJS 模块 5 》 ECMAScript Harmony 模块 Module 模式某种程度上是基于对象的字面量 9.2.1 对象字面量 在对象字面量表示法中,一个对象被描述为一组包含在大括号 {} 中、以逗号分隔的 name/value 对。对象内的名称可以是字符串或标识符,后面跟着一个冒号。对象中最后的一个 name/value 对的后面不用加逗号,如果加逗号将会导致出错。 Var myObjectLiteral={ variableKey:variableValue; functionKey:function(){ // } }; 对象字面量不需要使用 new 运算符进行实例化,但不能用在一个语句的开头,因为开始的可能被解读为一个块的开始。在对象的外部,新成员可以使用如下赋值语句添加在字面量上,如: myModule.property="some Value"; 使用对象字面量有助于封装和组织代码, Module 模式仍然使用对象字面量,但只是作为一个作用域函数的返回值。 var myModule= { myProperty: "somevalue" , //