战术设计的重点是模型的设计,DDD的模型大体上可分为对象和操作两类,其中对象类模型主要分为实体对象、值对象、聚合、资源库对象,操作类模型主要分为领域事件和领域服务。 本小节涉及的代码由java语言实现,相应文字描述中的技术术语也是java相关的,有兴趣的读者也可以翻译成其它语言。一、实体 下表中示例是用java语言实现的一个用户实体类,包含主键、用户名和密码三个属性,其getter/set
模型的复杂性必须通过重构和知识的消化才能把关键的领域、最有价值的部分(core domain)、优先级提取出来。让团队而把主要精力放在core domain上而不要为无关的细节分散注意力,这有益于:帮助团队成员掌握系统的总体设计以便更好的协调工作;找到一个具有适度规模的核心模型并把它添加到通用语言中,从而促进沟通;专注于模型中最有价值的那部分;指导外包、现成组件的使用以及任务委派;指导重构;精炼的
零信任架构(ZTA)是一种安全方法,它基于如下理念设计:必须验证组织边界内外的每个用户和设备后,才能授予访问权。零信任安全如何允许用户以流畅、安全的方式访问其应用程序,从而帮助业务实现价值。在该架构下,只有经过验证与授权的用户和设备才能访问应用程序与数据。同时,它保护这类应用程序和用户远离复杂的互联网危险。
在《快速开始》章节笔者对战略设计的解释是这样的:DDD中的战略主体是业务,并不是由公司经营者制定的以运营或管理为目的的那种战略规划。详细来讲是指以业务为核心,合理的设计模型(领域)、划分(限界上下文),再综合组织架构、实现技术等因素辅以相应的集成策略(上下文映射)。笔者在本节再精简一下,DDD中的战略设计就是指限界上下文,其设计围绕组织间合作模式和应用间所采
虽然docker命令比较多,但本节中的命令日常使用是最多的,所以特意详细扩展一下。容器管理run-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;-d: 后台运行容器,并返回容器ID;-i: 以交互模式运行容器,通常与 -t 同时使用;-P: 随机端口映射,容器内部端口随机映射到主机的端口-p:&nbs
基础docker images 列出本地主机上的镜像docker images REPOSITORY TAG IMAGE ID CREATED SIZEubuntu 14.04 90d5884b1ee0 5 days ago
基本使用docker run 启动容器docker run ubuntu:15.10 /bin/echo "Hello world" Hello world 以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。docker: Docker 的二进制执行文件。run:&n
日常电脑开发时或学习时经常要安装特别多的软件,如果多个版本还容易出现冲突问题,所以docker成了首先,笔者以mac系统为例,简单描述下docker使用时常用的安装和命令。环境:macos 11.6.5安装docker下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-mac 安装后会有个小鲸鱼图标,安装后在命令
常用快捷键—>command+W 变量格式—>command+T 转到接口实现—>command+R 调试运行—>command+click 声明或使用—>双击shitf 查找所有的文件—>command+3 查找所有—>command+2 显示结构—>command+shift+R 重加载本地文件—>control
空闲时间吧,整理几篇短小实用的字典类文档,主要是java开发环境相关的包括git、maven、idea的基本配置和操作。配置git --versiongit config --global user.name "liudong"git config --global user.email "liudong@shukun.com"创建//本地初始化git init //生成一个.git目录git -
非常不容易呀,本章完结后,jvm的主要专题基本算完整了,就先暂时告一段落了,感谢大家的支持。由于笔者水平有限,也欢迎大家指正哈。 本章主要是描述下JVM调优过程中主要用的一些工具和命令,可当做工具手册来使用。
在实操作本章内容之前,请一定详细了解1/3章GC基础的内容,同时因为每个应用的情况不太一样,所以JVM调优没有一个统一的模式,只有深入了解其原理后才能进行调优操作。笔者大概罗列了一下JVM调优的必要过程:1、了解jvm原理;2、了解jvm相关参数;3、可读懂gc日志;4、上线压测。
此章笔者会多写点,分三个子专题来讲述:理论基础、实操、工具使用。目的是争取使读者一次性弄懂。不需要再反反复复的查各种资料,笔者也会把之前踩过的坑也详细描述下,防止读者再走笔者的弯路。 牢记:可被GC管理的内存区只有堆和方法区,其它3个私有区都会随着线程终止而释放。
本章笔者会重新组织下语言,着重讲下JVM的内存结构。此章会贯穿JDK1.6到JDK1.8的内容,最后会阐述下类初始化的过程,从原理上了解JVM的内存分配机制,本章内容比较基础但非常重要,它是优化代码和JVM调优的基本一定要牢记。后续会专题讲解JVM调优的实操,本章相当于授渔,后续章节相当于授鱼吧。 JVM通俗来讲有三种不同的解释:1、一套抽象的规范;2、一个具体的规范实现,分为硬件和软件实现;3、一个运行中的java实例。正常我们指的是第三种:运行在一个jvm实现上的java程序。在同一计算机上同时运行三个java程序,将得到三个java虚拟机实例,每个java程序都运行于它自己的java VM中。
jvm是老生常谈的一个话题了,虽然大家一直在用在研究,但有时遇到一些线上问题时有时还是无从下手,笔者刚开始接触时可以说是一看就会,一用就废(可能水平有限哈),后续又系统性的回顾了几次,也处理过各种由于JVM配置不合理引发的线上问题,随着理解的深入发现对复杂程序的编写以及性能的调优还是有很大用处的。基于以上,笔者最近整理了一系列文章,供大家参考。希望大家能少走笔者的弯路。全系统大概分4部分:jvm基
本章基于java的sdk演示下es的操作。例子稍简单一点,读者可自己扩展。本发环境如下:mac os 11、es7.8.0、idea2022maven引入 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>e
一、基础知识ES的搜索由两部分组成:1、查询;2、获取 ;一般来讲,ES很少用match_all查询,正常是通过查询+过滤器组合的方式来完成;后者不计算得分,且结果可被缓存,性能会更好。具体采用哪种查询类型取决于数据在索引中是如何存储的;查询过滤器用于过滤查询结果用,一般用在查询和聚合查询的body条件中。查询 格式说明适用场景match_allmatch_all:{}匹配所有文档全文检查,不太建
一、概要在ES中会分为4种,常用的有度量和桶。后者其实就是前者的细分。比如参加此次活动的人数为1000人,男生占400人女生占 600人。这个1000可以看成是度量,后面的男生女生可看成是桶。分类桶(bucket):每个桶都与键和文档关联;度量:在一组文档上跟踪和计算度量值;矩阵:对多个字段进行操作并根据从请求的文档字段中撮的值生成矩阵结果;管道:聚合其它聚合的输出;处理的逻辑如下图所示:使用时会
此章依然是es的restfulAPI,因为es的映射是可选的操作,又由于其比较重要,所以单拿一节告别说明。除了API还有字段定义(相当于mysql的create table)相关的知识点,这些对优化es比较有意义。一、概要说明简单示例对索引字段的定义,包括数据类型、存储属性、分析器、词向量等。put customer { "mappings":{ "properties":{
此章内容比较简单,是官方的一个主要API,精选了一些日常开发中需要使用的,罗列一下。一、通用规则操作原则索引操作:索引建议只增不改,因为修改过程相当于删除+重索引;更新数据:这是一个先查询确认文档存在、修改内容、删除旧文档、在原有位置重新索引的过程。ES默认是采用版本号的方式来控制的删除数据:删除文档:ES会先标记,再异步物理删除;删除索引:直接删除整个文件;关闭索引:类似删除,但会在磁盘上保留文
es简介 纯java开发,采用倒排索引进行文档的索引,同时通过TF-IDF(词频-逆文档词频)排序算法确保结果的相关性。在索引过程中还可以通过脚本的方式自定义:1、处理拼写错误;2、关键词变体,分词;3、查询内容时附带统计信息;4、自动提示功能等。可以用于主存储也可以用于文档搜索。需要注意的是es不支持事务,所以用做主存储时需要留意。es的优点是:1、以文档为基础,可用作nosql存储;
今天笔者新开一个系列es(以后简称es),原因是笔者在日常工作中发现大部分研发同学只了解其API开发,对于技术评估和索引优化基本是黑盒的状态,而这个中间件又是互联网公司面试和工作中的非常得要的一个。纯B端的应用开发基本不会接触到es,在此笔者不会描述太深,主要围绕核心原理和日常开发这两点,假如有意愿的同学建议全篇通读一下。对于日常工作和面试基本够用了。简单概括一下ES的使用场景:1、可做过目录索引
使用DDD的最终目的是深入学习业务如何运作。然后基于学习试验、质疑、再学习和重建模的过程。过程中面临的最大挑战是如何快速学习,并且在保证学习质量的前提下压缩学习时间(你的学习是需要公司付工资的)。事件风暴就是一种相对高效的分析工具,除了比较适合DDD外还适合其它类似的分析工作,为了让大家快速明白事件风暴的玩法,笔者偷个懒从网上找了一个稍复杂点的例子。在学习完本节内容后,读者可以按事件风暴方法独自分
理论知识概述C4-MODEL:主要设计理念类似于地图,C4关键要素包括:关系——带箭头的线、元素——方块和角色、关系描述——线上的文字、元素的描述——方块和角色里的文字、元素的标记——方块和角色的颜色、虚线框。C4核心图:系统: System Context,所表达的是系统和用户以及它所依赖系统之间的关系容器:Container,系统是由容器组成的,这个容器是一个抽象的概念,代指有自己独立进程空间
本文是一篇关于软件设计领域并围绕组件化这个主题展开的文章,但文中并不想讨论具像的组件,而是想描述下笔者正在经历的组件化过程中背后的一些思考,希望能给正在组件化路上的同学带来一点借鉴。概述 软件公司内,重复造轮子的事一直在发生,这部分的资源浪费是可以通过复用来规避的。业务达到一定规模并且业务模式清晰和业务场景可枚举时,对复用的诉
正文开始前先解释下文章的标题,"应用"而没用"系统"这个术语,笔者认为从微观上来讲多个应用的聚合才称为一个系统,应用是多个服务接口的聚合。按照这个概念来理解的话系统压测的最小单元是应用、应用压测的最小单元是服务接口。这两类压测的方法是完全不一样的,日常工作中最常做的是单个接口的性能压测即应用压测,下面简称为压测;"压测"说明文中所有内容都和性能压测相关,我们不会谈及其它类型的测试知识;"一点事"
上面4章围绕索引讲索了一些通用的实现原因,但并没涉及到具体的数据库。因笔者接触最多的是就是mysql数据库,所以综合以上知识点罗列下mysql数据库的特点。存储引擎存储引擎是基于表的,而不是数据库。在mysql中会有:MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、Ma
查询慢语句show processlist; 查看Mysql的最大缓存show global variables like "global max_allowed_packet" 查看当前正在进行的事务select * from information_schema.INNODB_TRX 查看当前Mysql的连接数show status like 'thread%' 查看连接情
mysql索引
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号