DCI架构
https://www.artima.com/articles/dci_vision.html https://www.jdon.com/37976 The DCI Architecture: A New Vision of Object-Oriented Programmingby Trygve Reenskaug and James O. CoplienMarch 20, 2009 Summary Object-oriented programming was supposed to unify the perspectives of the programmer and the end user in computer code: a boon both to usability and program comprehension. While objects capture structure well, they fail to capture system action. DCI is a vision to capt...
六边形架构
https://www.jianshu.com/p/c2a361c2406c 六边形架构六边形架构又称“端口和适配器模式”,是Alistair Cockburn提出的一种具有对称性特征的架构风格。在这种架构中,系统通过适配器的方式与外部交互,将应用服务于领域服务封装在系统内部。 六边形架构还是一种分层架构,如上图所示,它被分为了三层:端口适配器、应用层与领域层。而端口又可以分为输入端口和输出端口。 输入端口 用于系统提供服务时暴露API接口,接受外部客户系统的输入,并客户系统的输入转化为程序内部所能理解的输入。系统作为服务提供者是对外的接入层可以看成是输入端口。 输出端口 为系统获取外部服务提供支持,如获取持久化状态、对结果进行持久化,或者发布领域状态的变更通知(如领域事件)。系统作为服务的消费者获取服务是对外的接口(数据库、缓存、消息队列、RPC调用)等都可以看成是输入端口。 应用层 定义系统可以完成的工作,很薄的一层。它并不处理业务逻辑通过协调领域对象或领域服务完成业务逻辑,并通过输入端口输出结果。也可以在这一层进行事物管理。 领域层 负责表示业务概念、规则与状态...
Clean架构
Clean架构 外圈的层次可以依赖内层,反之不可以;内圈核心的实体代表业务,不可以依赖其所处的技术环境。 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构。干净架构提出了一种单向依赖关系,从而在逻辑上形成一种向上的抽象系统。 这种干净的架构图如下: 依赖规则Dependency Rule上图中同心圆代表各种不同领域的软件。一般来说,越深入代表你的软件层次越高。外圆是战术实现机制,内圆的是战略核心策略。 使此体系架构能够工作的关键是依赖规则。这条规则规定源代码只能向内依赖,在最里面的部分对外面一点都不知道,也就是内部不依赖外部,而外部依赖内部。这种依赖包含代码名称、类的函数、变量或任何其他命名软件实体。 同样,在外面圈中使用的数据格式不应被内圈中使用,特别是如果这些数据格式是由外面一圈的框架生成的。我们不希望任何外圆的东西会影响内圈层。 实体Entities实体封装的是企业业务规则,一个实体是一个带有方法的对象,或者是一系列数据结构和函数,只要这个实体能够被不同的应用程序使用即可。 如果你没有编写企业软件,只是编写简单的应用程序,这些实体就是应用的业...
Uber开源Go语言编程规范
Uber开源Go语言编程规范 近日,Uber 开源了其公司内部使用的《 Go 语言编程规范》。该指南是为了使代码库更易于管理,同时让工程师有效地使用 Go 语言特性。文档中详细描述了在 Uber 编写 Go 代码的各种注意事项,包括具体的“Dos and Don’ts of writing Go code at Uber”,也就是 Go 代码应该怎样写、不该怎样写。今天我们就来简单了解一下国外大厂都是如何来写代码的。行文仓促,错误之处,多多指正。 https://www.infoq.cn/article/G6c95VyU5telNXXCC9yO 1. 介绍英文原文标题是 Uber Go Style Guide,这里的 Style 是指在管理我们代码的时候可以遵从的一些约定。 这篇编程指南的初衷是更好的管理我们的代码,包括去编写什么样的代码,以及不要编写什么样的代码。我们希望通过这份编程指南,代码可以具有更好的维护性,同时能够让我们的开发同学更高效地编写 Go 语言代码。 这份编程指南最初由 Prashant Varanasi 和 Simon Newton 编写,...
常见的十种软件架构模式
原文作者:Vijini Mallawaarachchi原文地址:10 Common Software Architectural Patterns in a nutshell 常见的十种软件架构模式有没有想过要设计多大的企业规模系统?在主要的软件开发开始之前,我们必须选择一个合适的体系结构,它将为我们提供所需的功能和质量属性。因此,在将它们应用到我们的设计之前,我们应该了解不同的体系结构。 什么是架构模式?根据维基百科中的定义: 架构模式是一个通用的、可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题。架构模式与软件设计模式类似,但具有更广泛的范围。 在本文中,将简要地解释以下10种常见的体系架构模式,以及它们的用法、优缺点。 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器模式 代理模式 点对点模式 事件总线模式 模型-视图-控制器模式 黑板模式 解释器模式 一. 分层模式这种模式也称为多层体系架构模式。它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别。每个层都为下一个提供更高层次服务。 一般信息系统中最常见...
常见的五种软件架构
http://www.ruanyifeng.com/blog/2016/09/software-architecture.html 常见的五种软件架构软件架构(software architecture)就是软件的基本结构。 合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。 O'Reilly 出版过一本免费的小册子《Software Architecture Patterns》(PDF), 介绍了五种最常见的软件架构,是非常好的入门读物。我读后受益匪浅,下面就是我的笔记。 一、分层架构分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。 这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。 虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。 表现层(presentation):用户界面,负责视觉和用户互动 业务层(business):实现业务逻...
bind9实战
bind9实战前言不想每次都修改host文件来实现我的域名访问,所以我在想有没有一个更好的方式,可以让我实现域名映射。这个时候我想到了自己架设一个dns服务器。使用用开源dns系统bind9。 DNS资源记录类型 A : 此记录列出特定主机名的 IPv4地址。这是名称解析的重要记录。 AAAA : 名称至 IPv6 地址 CNAME 标准名称 此记录指定标准主机名的别名。 PTR : IPv4/IPv6 地址至名称 MX:邮件交换器,此记录列出了负责接收发到域中的电子邮件的主机。 NS:名称服务器,此记录指定负责给定区域的名称服务器。 dig结果显示中status参数 NOERROR : 查询成功 NXDOMAIN : DNS 服务器提示不存在这样的名称 SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败 REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 ) 安装其实安装非常简单,一条命令就搞定了 1sudo apt install bind9 管理命令启动: 1sudo systemctl st...
如何安装设置Bind9 DNS服务器
如何安装设置Bind9 DNS服务器本指南是写给那些想学习如何配置和维护DNS服务器的人,例如为某个网络或者DNS zones(DNS域)提供 Domain Name(域名)服务 软件库BIND9 已经包含在 Ubuntu 核心库中,BIND9 并不需要启用其它附加库。 在我们开始之前,您应该熟悉 RootSudo。 安装 BIND9服务器 1$ sudo apt-get install bind9 有用的工具(测试用) 1$ sudo apt-get install bind9-host dnsutils 文档(可选) 1$ sudo apt-get install bind9-doc BIND9 ScenariosBIND9 可以安装配置成许多类型。 最常用的配置有: 缓冲服务器这对于宽带连接的主机或小网络来说是有用的。通过缓冲 DNS 队列,您可以减少带宽的消耗,或者说有望减少您带宽的使用(甚至有望减少您宽带费用)。 主服务器BIND9 可以用于为已注册或虚拟的(仅用于受限网络中)域名提供 DNS 记录(指向域的记录组)。 从服...
palybook详解
模块:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html Playbook介绍playbooks是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。 核心元素 Tasks:任务,由模板定义的操作列表 Variables:变量 Templates:模板,即使用模板语法的文件 Handlers:处理器 ,当某条件满足时,触发执行的操作 Roles:角色 hosts和users介绍 在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。 123-...
ansible入门
中文教程:https://ansible-tran.readthedocs.io/en/latest/index.html 模块:https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html 前言当下有许多的运维自动化工具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。 Ansible 一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。 Ansible 基于 Python 语言实现,由 Paramiko 和 PyYAML 两个关键模块构建。 Ansible 特点: 部署简单,只需在主控端部署 Ansible 环境,被控端无需做任何操作。 默认使用 SSH(Secure Shell)协议对设备进行管理。 主从集中化管理。 配置简单、功能强大、扩展性强。 支持 API 及自定义模块,可通过 Python 轻松扩展。 通...
Nginx配置文件nginx.conf详解
Nginx配置文件nginx.conf详解 http://nginx.org/en/books.html nginx可以平滑升级 server继承main,location继承server,upstream既不会继承其他设置也不会被继承。在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。 1.公共模块1234567891011121314151617#定义nginx运行的用户和用户组user www www;#nginx进程数,不知道怎么设置就设为auto,由系统自动分配worker_processes auto;#一个nginx进程打开的最多文件描述符数目,建议与ulimit -n的值一致worker_rlimit_nofile 65535;#根据worker的数量自动配置cpu绑定位图,这个参数是tengine配置worker_cpu_affinity auto;#全...
Harbor搭建私有docker registry
https://github.com/goharbor/harbor https://github.com/goharbor/harbor/blob/master/docs/user_guide.md 简单的说,Harbor 是一个企业级的 Docker Registry,可以实现 images 的私有存储和日志统计权限控制等功能,并支持创建多项目(Harbor 提出的概念),基于官方 Registry V2 实现。 Harbor提供的特性 基于角色控制 用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限。 基于镜像的复制策略 镜像可以在多个Harbor实例之间进行复制。 支持LDAP Harbor的用户授权可以使用已经存在LDAP用户。 镜像删除 & 垃圾回收 Image可以被删除并且回收Image占用的空间。 友好UI 用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理。 便于扩展 绝大部分的用户操作API, 方便用户对系统进行扩展。 轻松部署 Harbor提供了online、offline安装,除此之外还提供了virtualapplianc...
Jenkins+Gogs搭建自动化部署平台
系统:ubuntu19.04 数据库:mysql5.7 git服务器:gogs 持续集成工具:jenkins 私有仓库:harbor 1.创建一个网络12345# 创建docker network create -d bridge --subnet=172.20.0.0/24 --gateway=172.20.0.1 deploy# 删除docker network rm deploy 2.搭建gogs服务器2.1 创建数据卷目录123sudo mkdir -p /var/jenkins/docker_mysql/datasudo mkdir -p /var/jenkins/docker_mysql/logsudo mkdir -p /var/jenkins/docker_gogs 2.2 编写docker-compose.yaml文件存放路径~/jenkins/gogs gogs初始化数据库时填写mysql的IP地址(172.20.0.2) 12345678910111213141516171819202122232425262728293031323334353...
docker网络模式
http://blog.daocloud.io/docker-bridge/ https://www.cnblogs.com/my_life/articles/8603435.html https://www.jianshu.com/p/22a7032bb7bd https://www.jb51.net/article/147664.htm https://www.cnblogs.com/iiiiher/p/8052974.html https://blog.csdn.net/qq_41830712/article/details/90721395(两个网桥通信) docker network比较基础的几个命令 1234567docker network ls List networks 罗列容器网络列表docker network create Create a network 创建一个容器的网络docker network connect Connect a container to a network 让一个容器连接到指...
docker-compose.yaml常用指令
https://docs.docker.com/compose/compose-file/ Compose和Docker兼容性:Compose 文件格式有3个版本,分别为1, 2.x 和 3.x。目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本 12345678910#系统变量$PWD : 当前目录#注意:YAML布尔值(true,false,yes,no,on,off)必须用引号括起来,以便解析器将它们解释为字符串。#字典时environment: SHOW: 'true' 数组时 environment: - SHOW=true 常用参数: version # 指定 compose 文件的版本 services # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 build # 指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile 文件以及 args 参数值 context ...
docker部署gogs/gitea
数据库:mysql git服务器:gogs/gitea https://docs.gitea.io/zh-cn https://gogs.io/ docker部署gogs/gitea创建数据卷目录1234mkdir -p /var/mysql/datamkdir -p /var/mysql/logmkdir -p /var/gogsmkdir -p /var/gitea 编写docker-compose.yamlgogs/gitea初始化数据库时填写mysql的IP地址(172.18.0.2) 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071version: '3'services: # mysql service mysql: container_name: mysql image: mysql:5.7...
ubuntu错误解决方法
0x01错误: 1-bash: ./xxx.sh: /bin/bash^M: bad interpreter: No such file or directory 问题的原因是我在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。 1.安装dos2unix 1apt install dos2unix 2.转换格式 1dos2unix xxx.sh 0x02ubuntu20.04.1 ssh登录 安装ssh 1sudo apt install openssh-server 修改配置文件 123456789101112vi /etc/ssh/sshd_config#Port 22#改为Port 22#PermitRootLogin prohibit-password#改为PermitRootLogin yes#在最后一行增加:KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecd...
mysql查询树形表结果:说说、说说的评论、评论的回复
原文:https://www.iteye.com/blog/mxskymx-2249326 表结构用户的说说表123456789101112131415161718DROP TABLE IF EXISTS `ixt_customer_note`;CREATE TABLE `ixt_customer_note` ( `id` varchar(50) NOT NULL COMMENT '主键UUID', `customerId` varchar(50) NOT NULL COMMENT '用户id', `content` varchar(500) NOT NULL COMMENT '说说内容', `createUser` varchar(50) DEFAULT NULL COMMENT '创建人ID', `createDate` datetime DEFAULT NULL COMMENT '创建时间', `updateUser` varchar(50) DEFAULT...
NATS Streaming集群
NATS Streaming集群支持的持久化为了以群集模式运行NATS Streaming Server,您需要指定一个持久性存储。 目前,您可以在“ FILE”和“ SQL”之间进行选择。NATS Streaming将服务器元信息,消息和订阅存储到使用--store选项配置的存储中。 但是,在群集模式下,我们使用RAFT进行领导者选举。RAFT使用其自己的存储,这些存储当前必须基于文件。 RAFT存储的位置默认为以群集ID命名的子目录下的当前目录,或者您可以使用--cluster_log_path对其进行配置。 这意味着,即使您选择了一个SQL存储,仍然需要在文件系统上存储数据。 配置我们可以通过使用-cluster_peers标志提供集群拓扑来组建NATS流集群。 这只是参与集群的一组节点ID。 请注意,一旦建立领导者,我们便可以启动后续服务器而无需提供此配置,因为它们将自动加入领导者。 如果服务器正在恢复,它将使用恢复的群集配置。 这是在集群中启动三台服务器的示例。 对于此示例,我们运行流服务器连接到的单独的NATS服务器。 12345nats-streaming-ser...
docker部署Registry仓库(废)
参考:http://book.itmuch.com/3%20%E4%BD%BF%E7%94%A8Docker%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1/3.5%20Docker%E7%A7%81%E6%9C%89%E4%BB%93%E5%BA%93%E7%9A%84%E6%90%AD%E5%BB%BA%E4%B8%8E%E4%BD%BF%E7%94%A8.htmlhttps://www.cnblogs.com/zhaojiankai/p/7813969.html 部署Registry仓库(废)docker使用国内镜像进行加速常用站点 123456https://registry.docker-cn.comhttp://hub-mirror.c.163.comhttps://3laho3y3.mirror.aliyuncs.comhttp://f1361db2.m.daocloud.iohttps://mirror.ccs.tencentyun.comhttp://mirrors.ustc.edu.cn/ 编辑文件/...