保存成功
订阅成功
保存失败,请重试
提交成功
当前位置 > 首页 > 架构 > Chat
架构
当 DDD 遇上 DSL
在`领域驱动设计峰会 2019`上,作者应邀参加了 InfoQ 的架构专访。在交流过程中,作者阐述了 DDD、DSL 和 DCI 的关系,同学们可以通过学习专访文章 [DDD:架构思想的旧瓶新酒](https://www.infoq.cn/article/K6AfHfMlx6IZqKwmpXcu)来了解它们之间的关系。《当 DDD 遇上 DCI》是作者在全球架构师峰会 2019 深圳站分享的一个话题,后来发布了[一篇 Chat](https://gitbook.cn/new/gitchat/activity/5d5393ac40552e73266d04b6) 来传播。《当 DDD 遇上 DSL》可以看作是《当 DDD 遇上 DCI》的姊妹篇,是作者在`领域驱动设计峰会 2019`上分享的一个话题,受到了很多同学的认可和肯定。为了将该话题的核心知识点和实践经验传播给更多有意愿提升自己 DDD/DSL 建模能力的同学,作者决定写一篇 Chat 来详细阐述。 DDD(领域驱动设计) 是一种主流的软件设计方法,DSL (领域专用语言)是一种针对某一特定领域且具有受限表达性的计算机设计语言,当 DDD 遇上 DCI 会擦出什么样的火花?我们将结合典型案例一起探讨,共同成长,从而有效降低开发成本。命令/查询式 API 是一种常见的领域模型的组装方式,但在复杂场景下,内部或外部 DSL 是一种更好的选择。DSL 可以看作是在领域模型之上的一层外壳,能显著增强领域模型的能力。DSL 既可以提升开发人员的生产力,又可以增进开发人员与领域专家的沟通。 本场 Chat 的主要内容为: 1. DSL 简介 - 命令式与声明式 - DSL 是什么 - DSL 的价值 - DSL 的分类 2. DDD 与 DSL 融合 - 面向领域 - 模型组装的方式 - 分层架构 3. 三个典型案例 - 内部 DSL 案例:gomonkey API - 外部 DSL 案例:流程契约 - 横切面 DSL 案例:事务模型
张晓龙 · 架构师,DDD实践布道者
222 人已加入
架构
多种高并发设计让你的业务耗时飞起来
在实际的开发过程中,我们有很多耗时的业务去处理,比如我们方法内部不但执行了本地的很多业务代码并且还要去远程调用别的服务,导致整个方法响应太慢;又比如数据处理,需要往数据库中插入大量的数据,怎么使用 Java 程序快速批量执行呢?比如我们的 Excel 导出,因数据量太大并且多 Sheet 而出现了网络超时,这种问题该怎么去解决?又比如列表查询太慢了, SQL 调优已经是极限,用程序怎么去加快响应?等等问题都是实际开发中经常遇到的,说到这里,大家应该能想到,没错——那就是用多线程,对于优秀的 Java 技术人员来说,我们要掌握它,只有掌握了它,以上问题的才能迎刃而解,本场 Chat 就是帮大家使用多线程去解决以上的这些问题,同时在不同场景中选择最合适的并发设计,然后举一反三,类似的问题那还会是问题吗?本场 Chat 您值得拥有。 在本场 Chat 中,会讲到如下内容: - 当远程调用服务时,怎么使用多线程技术提升方法的响应速度,文章内容将会用三种程序设计来分别讲解,并分析他们的优缺点。 - 大量的数据怎么使用任务切分批量插入数据库中。 - Excel 导出怎么使用多线程技术提升响应,文章内容将会用两种程序设计分别讲解,并分析他们的优缺点。 - 使用模板设计模式实现并行分页,加快查询列表的响应速度。 - 再次使用模板设计模式编写模拟异步发送消息的实例。 - 操作系统之纤程,在操作系统层面分析纤程与线程的区别,使你在面试过程之中出类拔萃。 - 做最后的总结。 - 温馨提示:以上实例程序都是在 SpringBoot 环境下运行的。 适合人群: 对多线程高并发感兴趣、系统响应上要求提升更快的 Java 技术人员
清然 · 高级工程师
352 人已加入
架构
调用链监控:微服务时代每个程序员必须点亮的技能点
工作三五年了,你觉得自己翅膀硬了,偷偷去大厂面试。面试官问你项目采用什么架构设计,你说是微服务架构。面试官又问了,微服务架构里面服务众多,服务调用链路错综复杂,你们是如何监控你们的服务调用链的,哪些是热门服务,QPS 峰值是多少,服务 GC 的频率是咋样的,你有服务性能优化经验吗,调优前后的性能指数分别是怎样的。面对面试官的疯狂追问,你顿时懵掉了。是啊,平时只顾着撸代码,对自己服务的性能一无所知,虽然代码确实优化过不少,但是从来没有准确度量过自己服务的质量,也不知道服务的瓶颈在哪里。平时工作节奏快,只顾着 CV 来快速完成领导分配的 CRUD 任务,这已经成为大多数程序员的工作常态。 如果你想摆脱这个困境,就得不断的学习,思考,研究。那么今天我们就来一起探讨一下微服务调用链监控系统的里里外外,当你再次面对大厂面试官绝情的 N 级连环炮时,不再是一个礼貌而又不失尴尬的微笑,而是一个自信又坦然微笑,伴随着一个肯定的回答:这方面的技术在下颇有研究! 本 Chat 将会涉及到以下内容: 1. 为什么要做调用链监控 2. 调用链监控原理 3. 调用链监控的前世今生 4. 开源调用链监控产品 CAT 简介 5. CAT 报表功能介绍 6. CAT 告警功能介绍 7. CAT 的架构设计 8. CAT 实战应用 9. 网关集成 CAT 监控 10. CAT 生产环境实践 11. Spring Cloud Sleuth 简介 12. 学习资料推荐 适用人群:具有一定的编程实战经验。
毛毛虫流鼻涕 · 高级技术专家
444 人已加入
架构
微服务架构深度解析与最佳实践
微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo、还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务。但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和服务的高可用可伸缩?拆分的过程中系统数量增多,测试、部署、运维、监控,又应该如何处理? 本文将从这些问题的深度分析出发,阐述微服务架构落地的一些设计原则和利弊取舍,结合微服务架构过程的很多最佳实践经验,希望给读者带来一定的启发和思考,避免在实际应用过程中走弯路,能够多快好省的落地实现微服务架构。内容涉及: 1. 微服务架构的发展过程简介 2. 微服务架构的特点与常见特性 3. 使用微服务架构的常见技术与简单示例 4. 微服务架构存在的一些问题 5. 如何合理拆分微服务 6. 遗留系统应该如何改造 7. 怎么考虑拆分后的数据一致性 8. 系统和服务的高可用可伸缩如何实现 9. 拆分过程的测试和部署如何处理 10. 拆分后的运维和监控如何处理 注意:作者撰写的 JVM 专栏已经上线,有兴趣的话可以阅读[《JVM 核心技术 22 讲》](https://gitbook.cn/gitchat/column/5de76cc38d374b7721a15cec&utm_source=chat1211)
秦金卫(kimmking) · 高级技术总监
1137 人已加入
架构
Redis 面试题全解析
在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。本 Chat 针对 Redis 大部分知识点梳理出来常见的面试题目,提供给大家进行有针对性的学习。 本 Chat 详细覆盖了: 1. Redis 的概念理解 2. Redis 基本数据结构详解 3. Redis 高并发问题策略 4. Redis 集群结构以及设计理念 5. Redis 持久化机制 6. Redis 应用场景设计 部分涉及到的题目如下: - 什么是 Redis? - Redis 的特点有哪些? - Redis 支持的数据类型 - 为什么 Redis 需要把所有数据放到内存中? - Redis 适用场景有哪些? - Redis 常用的业务场景有哪些? - Memcache 与 Redis 的区别都有哪些? - Redis 相比 Memcached 有哪些优势? - Redis 常用的命令有哪些? - Redis 是单线程的吗? - Redis 为什么设计成单线程的? - 一个字符串类型的值能存储最大容量是多少? - Redis各个数据类型最大存储量分别是多少? - Redis 持久化机制有哪些? 区别是什么? - 请介绍一下 RDB、AOF 两种持久化机制的优缺点? - 什么是缓存穿透?怎么解决? - 什么是缓存雪崩? 怎么解决? - Redis 支持的额 Java 客户端有哪些? 简单说明一下特点。 - 缓存的更新策略有几种?分别有什么注意事项? - 什么是分布式锁?有什么作用? - 分布式锁可以通过什么来实现? - 介绍一下分布式锁实现需要注意的事项? - Redis 怎么实现分布式锁? - 常见的淘汰算法有哪些? - Redis 淘汰策略有哪些? - Redis 缓存失效策略有哪些? - Redis 的持久化机制有几种方式? - 请介绍一下持久化机制 RDB、AOF 的优缺点分别是什么? - Redis 通讯协议是什么?有什么特点? - 请介绍一下 Redis 的数据类型 SortedSet(zset) 以及底层实现机制? - Redis 集群最大节点个数是多少? - Redis 集群的主从复制模型是怎样的? - Redis 如何做内存优化? - Redis 事务相关命令有哪些? - 什么是 Redis 事务?原理是什么? - Redis 事务的注意点有哪些? - Redis 为什么不支持回滚? - 请介绍一下 Redis 集群实现方案 - 请介绍一下 Redis 常见的业务使用场景? - Redis 集群会有写操作丢失吗?为什么? - 请介绍一下 Redis 的 Pipeline (管道),以及使用场景 - 请说明一下 Redis 的批量命令与 Pipeline 有什么不同? - Redis 慢查询是什么?通过什么配置? - Redis 的慢查询修复经验有哪些? 怎么修复的? - 请介绍一下 Redis 的发布订阅功能 - 请介绍几个可能导致 Redis 阻塞的原因 - 怎么去发现 Redis 阻塞异常情况? - 如何发现大对象 - Redis 的内存消耗分类有哪些?内存统计使用什么命令? - 简单介绍一下 Redis 的内存管理方式有哪些? - 如何设置 Redis 的内存上限?有什么作用? - 什么是 bigkey? 有什么影响? - 怎么发现 bigkey? - 请简单描述一下 Jedis 的基本使用方法? - Jedis连接池链接方法有什么优点? - 冷热数据表示什么意思? - 缓存命中率表示什么? - 怎么提高缓存命中率? - 如何优化 Redis 服务的性能? - 如何实现本地缓存?请描述一下你知道的方式 - 请介绍一下 Spring 注解缓存 - 如果 AOF 文件的数据出现异常, Redis服务怎么处理? - Redis 的主从复制模式有什么优缺点? - Redis sentinel (哨兵) 模式优缺点有哪些? - Redis 集群架构模式有哪几种? - 如何设置 Redis 的最大连接数?查看Redis的最大连接数?查看Redis的当前连接数? - Redis 的链表数据结构的特征有哪些? - 请介绍一下 Redis 的 String 类型底层实现? - Redis 的 String 类型使用 SSD 方式实现的好处? - 设计一下在交易网站首页展示当天最热门售卖商品的前五十名商品列表? 等等...... 通过本 Chat 详细大家能够轻松的应对 Redis 相关的面试挑战,同时也可通过全面的面试题目来学习和巩固自己的知识。
驰骋 · 高级技术经理
1560 人已加入
架构
小而精的 Docker 项目,30 分钟快速入门 Docker 容器
为什么要使用 Docker? - Docker 容器的启动在秒级 - Docker 对系统资源利用率高,一台主机上可以同时运行数千个Docker容器。 - Docker 基本不消耗系统资源,使得运行在Docker里面的应用的性能很高。 相比于传统的虚拟化技术,Docker 有哪些优势? - 更快速的支付和部署:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 - 更高效的虚拟化:Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效。 - 更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 - 更简单的管理:使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。 本 Chat 涉及的内容: - Docker 安装 - 获取 Docker 镜像 - 创建镜像 - 本地导入镜像 - 保存、载入、删除镜像 - Docker 容器的创建、启动和停止 - 进入后台运行中的容器 - 导入、导出、删除容器 - 创建 Docker 私有仓库 - Docker 容器绑定外部 IP 和端口 - 容器互连 - Dockerfile 常见的 11 中指令(FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER)的使用 - 小项目,完整实战
奔跑的小米 · 架构师
344 人已加入
架构
GoMonkey1.0 框架设计与应用实践
GoMonkey 是作者为 Go 语言开发的一款打桩框架,目标是让用户在单元测试中低成本的完成打桩,从而将精力聚焦于业务功能的开发。GoMonkey 接口友好,功能强大,目前已被很多项目使用,用户遍及世界多个国家。 GoMonkey 的特性列表: - 支持为一个函数打一个桩 - 支持为一个成员方法打一个桩 - 支持为一个全局变量打一个桩 - 支持为一个函数变量打一个桩 - 支持为一个接口打一个桩 - 支持为一个函数打一个特定的桩序列 - 支持为一个成员方法打一个特定的桩序列 - 支持为一个函数变量打一个特定的桩序列 - 支持为一个接口打一个特定的桩序列 GoMonkey 初步计划了 2 个大版本: - GoMonkey1.0 提供丰富的命令式 API,可以满足用户各种场景的基本打桩诉求 - GoMonkey2.0 提供强大的 DSL,增强打桩功能,同时提升易用性 GoMonkey1.0 在 Github 发布一年后,已获得 200 多个 star,同时即将启动 GoMonkey2.0 的开发。在这个承上启下的阶段,作者想写一篇 Chat 来系统梳理 GoMonkey1.0 框架设计与应用实践。 本 Chat 的主要内容包括: - GoMonkey 介绍 - GoMonkey 是什么 - GoMonkey 与其他打桩框架的比较 - GoMonkey 与 GoMock 的比较 - GoMonkey 与 GoStub 的比较 - GoMonkey 与 Monkey 的比较 - 框架设计 - API 设计 - 领域模型 - 跨平台 - 注意事项 - 应用实践 - 为一个函数打一个桩 - 为一个成员方法打一个桩 - 为一个全局变量打一个桩 - 为一个函数变量打一个桩 - 为一个接口打一个桩 - 为一个函数打一个特定的桩序列 - 为一个成员方法打一个特定的桩序列 - 为一个函数变量打一个特定的桩序列 - 为一个接口打一个特定的桩序列
张晓龙 · 架构师,DDD实践布道者
115 人已加入