flower

DDD之1微服务设计为什么选择DDD

筅森魡賤 提交于 2020-08-09 18:40:57
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

DDD之1微服务设计为什么选择DDD

删除回忆录丶 提交于 2020-08-07 21:28:15
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

DDD之1微服务设计为什么选择DDD

自作多情 提交于 2020-08-05 08:14:35
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

html5 canvas+js实现ps钢笔抠图(速抠图 www.sukoutu.com)

笑着哭i 提交于 2020-08-05 00:08:58
html5 canvas+js实现ps钢笔抠图( 速抠图 www.sukoutu.com ) 根据html5 canvas+js实现ps钢笔抠图的实现,aiaito 开发者开发了一套在线抠图工具, 速抠图sukoutu.com 是一款公益性质的免费在线快速抠图工具, 支持支持8倍高清钢笔抠图、矩阵抠图、图片压缩、图片尺寸调整等,该工具旨在为用户提供更快捷高效的抠图服务。 1. 项目要求需要用js实现photoshop中钢笔抠图功能,就用了近三四天的时间去解决它,最终还是基本上把他实现了。 做的过程中走了不少弯路,最终一同事找到了canvans以比较核心的属性globalCompositeOperation = "destination-out", 属性可以实现通过由多个点构成的闭合区间设置成透明色穿透画布背景色或是背景图片,这样省了许多事。 2.实现效果: 鼠标点完之后会将所有的点连成闭合区间,并可自由拖拉任一点,当形成闭合区间后,可在任意两点之间添加新点进行拖拉。 3.实现思路: 设置两层div,底层设置图片,顶层设置canvas画布(如果将图片渲染到画布上,抠图时会闪烁,所以至于底层),在画布上监视 鼠标事件反复渲染点及之间连线,形成闭合区间后将整体画布渲染小块背景图片,并将闭合区间渲染透明色。并把点的相对画布 坐标记录或更新到数组中去。截完图后,将点的坐标集合传回后台

DDD之1微服务设计为什么选择DDD

我只是一个虾纸丫 提交于 2020-07-28 04:26:48
背景 名词解释 如果你的团队目前正是构建微服务架构风格的软件系统,问自己两个问题? 软件架构演进 软件架构大致经历了从单机架构,集中式架构,分布式微服架构,程序的层次图如下所示。 单机架构 特点如下: 1, 面向过程的设计方法; 2, 结构为CS; 3,程序的层次分两层,即UI层和数据库层; 4, 设计的核心在数据库和字段。 集中式架构 特点如下: 1, 面向对象的设计方法; 2,程序层次为经典的3层架构,即业务接入层, 业务逻辑层,数据库层; 3,部分企业也采用SOA架构风格; 4,集中式的架构缺点:扩展性,伸缩性差,系统容易变得臃肿; 分布式微服务架构 特点: 1, 基于微服务的理念:分而治之,模块高内聚(独立团队,独立部署,独立存储,技术异构),模块之间通过RPC或者HTTP通信,松耦合; 2,模块之间松耦合,解决了扩展性和伸缩性的问题; 架构对比 单体架构和集中式架构,系统分析, 系统设计,系统开发这3个阶段是割裂的,即分属3个不同的人或者小组或者岗位的人负责,这样的后果是: 1, 系统分析,设计,开发三个阶段的信息不一致,导致上线之后功能跟需求偏差非常大; 2, 系统的开发无法快速响应需求和业务的变化,错失发展的良机。 微服务的困局 微服务解决的问题 微服务解决了单体架构和集中式架构的问题:扩展性,弹性伸缩,敏捷开发快速响应业务变化; 但是微服务并非毫无缺陷。

2.zookeeper数据弱一致性

不想你离开。 提交于 2020-05-07 14:29:05
参考: https://blog.csdn.net/qq_21125183/article/details/86484213 ZK系列文章: https://blog.csdn.net/qq_21125183/category_8609552.html zookeeper本身支持单机部署和集群部署,生产环境建议使用集群部署,因为集群部署不存在单点故障问题,并且zookeeper建议部署的节点个数为奇数个,只有超过一半的机器不可用整个zk集群才不可用。zookeeper集群中主要有两个角色leader和flower,每个客户端可以连接集群中的任何一个zookeeper节点,同时从其上面read信息,但是针对write操作,flower节点会转发给leader,由leader负责原子广播,从而保证集群中各个节点的数据一致性,zookeeper中规定只有当多余一半的节点同步完成整个write操作才算完成。也就是说可能会有少于一半的数据不是新数据,因此zookeeper中不是强一致性而是实现的最终一致性。但是客户端可以使用sync来强制读取最新的数据。 最终一致性:读数据时,有可能会脏读。比较推荐watch的方式,实现数据的及时生效。 来源: oschina 链接: https://my.oschina.net/u/4331670/blog/4269290

A. The Way to Home

拥有回忆 提交于 2020-05-06 07:09:38
A. The Way to Home A frog lives on the axis Ox and needs to reach home which is in the point n . She starts from the point 1. The frog can jump to the right at a distance not more than d . So, after she jumped from the point x she can reach the point x  +  a , where a is an integer from 1 to d . For each point from 1 to n is known if there is a lily flower in it. The frog can jump only in points with a lilies. Guaranteed that there are lilies in the points 1 and n . Determine the minimal number of jumps that the frog needs to reach home which is in the point n from the point 1. Consider that

Chapter 2 :重构的原则

给你一囗甜甜゛ 提交于 2020-05-01 11:23:28
1,什么是重构? 在不改变软件可观察行为的前提下,使用一些重构的手法,提高代码可读性。 换句话说,在保持软件可用的前提下,修改代码使得更加容易被理解。 2,为什么重构? 为了后续的代码维护和修改,易读是重构的核心价值。 除此之外,重构随之带来的好处有: 找到bug 提高编程速度(在代码量累计到一定程度时,重构过的代码会更加易于添加新功能) 3,什么时候重构? 添加新功能之前重构 添加新功能最快的方法往往是先修改现有代码,使新功能容易被加入。 使代码更易理解时重构 顺便重构(修复bug,添加新功能) 代码复审(code review)时重构 总而言之:重构的门槛远远没有想象中那么高,重构是对既有代码的修改,也许我们在无意识中就已经做了这样的工作,一方面继续保持良好的编程习惯,另一方面学习更加成体系的重构手法。 就如同重构的定义,在可用的前提下,提高重构的技术。 什么时候不应该重构? 对于一段凌乱的代码,如果不需要修改它,就不需要重构。 只有当你需要理解其工作原理时,重构才变得有价值。 如果重写比重构更加容易,那就不需要重构了。(判断) 4,重构会遇到哪些问题? “毕竟生活里很少有晴空万里的好事” ——Martin Fowler 延缓新功能开发 先添加新功能再重构,还是先重构再添加新功能,这不是一个对错的问题,而是一个取舍的分叉口。 Martin Fowler的回答醍醐灌顶

python3+celery+redis实现异步任务

喜你入骨 提交于 2020-04-28 05:44:54
一、原理 Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。它是Python写的库,但是它实现的通讯协议也可以使用ruby,php,javascript等调用。异步任务除了消息队列的后台执行的方式,还是一种则是定时计划任务。 Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。它的架构组成如下图 组件: 1、任务(tasks)--用户定义的函数,用于实现用户的功能,比如执行一个耗时很长的任务 2、中间介(Broker)--用于存放tasks的地方,但是这个中间介需要解决一个问题,就是可能需要存放非常非常多的tasks,而且要保证Worker能够从这里拿取 3、执行者(Worker)--用于执行tasks,也就是真正调用我们在tasks中定义的函数 4、存储(Backend)--把执行tasks返回的结果进行存储,以供用户查看或调用 二、实现过程 1.环境安装(RabbitMQ/Redis、Celery、django-celery、flower) 我的python版本:3.7,celery版本:3.1.26.post2 2.创建工程 红圈为本工程所需: web

[LeetCode] 14. Longest Common Prefix 最长共同前缀

落爺英雄遲暮 提交于 2020-04-22 13:43:08
Write a function to find the longest common prefix string amongst an array of strings. If there is no common prefix, return an empty string "" . Example 1: Input: ["flower","flow","flight"] Output: "fl" Example 2: Input: ["dog","racecar","car"] Output: "" Explanation: There is no common prefix among the input strings. Note: All given inputs are in lowercase letters a-z . 这道题让我们求一系列字符串的共同前缀,没有什么特别的技巧,无脑查找即可,定义两个变量i和j,其中i是遍历搜索字符串中的字符,j是遍历字符串集中的每个字符串。这里将单词上下排好,则相当于一个各行长度有可能不相等的二维数组,遍历顺序和一般的横向逐行遍历不同,而是采用纵向逐列遍历,在遍历的过程中,如果某一行没有了,说明其为最短的单词,因为共同前缀的长度不能长于最短单词,所以此时返回已经找出的共同前缀。每次取出第一个字符串的某一个位置的单词