在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。...1 为什么需要连接池 假如没有连接池,我们操作数据库的流程如下: 应用程序使用数据库驱动建立和数据库的 TCP 连接 ; 用户进行身份验证 ; 身份验证通过,应用进行读写数据库操作 ; 操作结束后,关闭...创建数据库连接是一个比较昂贵的操作,若同时有几百人甚至几千人在线,频繁地进行连接操作将占用更多的系统资源,但数据库支持的连接数是有限的,创建大量的连接可能会导致数据库僵死。...当我们有了连接池,应用程序启动时就预先建立多个数据库连接对象,然后将连接对象保存到连接池中。当客户请求到来时,从池中取出一个连接对象为客户服务。...2、提高性能 当业务请求时,因为数据库连接在初始化时已经被创建,可以立即使用,而不需要等待连接的建立,减少了响应时间。
对于关系型数据库,如MySQL,一般是有主从数据库的,为了保稳定和不影响主库的查询性能,我们一般抽取从库数据。...采集到文件后需要对文件进行校验,文件完整的情况下才能继续后续数据处理程序。 03 实时数据采集 实时数据采集主要是一些页面日志的采集,也就是我们常说的用户行为分析数据。...数据埋点:网站上线后一般会植入一段JS脚本,用户放我页面时,JS会收集当前页面的一些信息,用户问的上下文信息以及当前访问的页面业务相关数据。...数据上报:JS执行完毕后,会将所有收集到的信息拼装到一个请求内,通过日志请求将数据发送到日志服务器,存储为JSON文件;一般情况下,在 JS 执行完成后就会立即向日志服务器发送消息队列中。...数据存储:存储在磁盘上的文件会部署数据采集组件比如Flume,将采集到的日志数据发送到HDFS进行存储或者转存到HBase进行存储。消息队列的数据则可以直接消费落地到HDFS或者HBase进行存储。
从上图可以看到,我们针对正常用户和暴力用户在不影响用户体验的前提下,采取降级、限流等措施,以保障系统稳定。那么我们是如何做的呢,下面我们分别来说说限流、降级。...1.2 暴力用户限流 暴力用户频繁刷应用系统,我们需要在这层做一些防刷,比如清洗恶意流量、做一些黑名单。当有恶意流量时,通过对IP、用户等限制手段把它拒绝在系统之外,防止这些恶意流量把系统冲垮。...在扩容前,有2个数据库DB-0和DB-1,现在需要扩容到8个数据库,以DB-0为例: a、我们只需要新找3台数据库,挂载到DB-0上当做从库,而后进行主从复制; b、在数据量最少的时间段,将主从复制切断...,同时做数据比对验证; e、停止旧应用,由扩容后的新应用开始承接所有的量,此时,数据库扩容完成。...在扩容完成后,我们只需要做冗余数据的清理即可,实现方式很多,例如可以通过数据归档任务: 写防重 一定时间段之前的数据进行归档 这样,经过一段时间后,冗余数据就会被清理掉,同时因为有防重,也不会出现多次归档导致归档数据重复
我想使用开源WAF其实就是每一个人评估后的必然结果,一个长期业务大概10年,10年的商业WAF投入需要多少?至少需要花费10万吧,一年1万算良心价格了,这还只是WAF,堡垒机呢?数据库审计呢?...风险评估: (1)意外评估 这里所说的风险评估与等保以及体系管理的风险评估还不是一个概念,风险包括人为风险和物理风险,人为风险可能包括人员的内部数据泄露、人为破坏、黑客入侵等等。...,开源WAF适配时间会长一些,使用中投入的人力成本会大一些,误报率会高一些,我认为本质没有什么区别,都需要业务的适配调整。...人员评估: 这其实是人事在筛选时应当做的事情,不过多涉及,那么我们作为面试过程中的面试官或同事角色,应当如何做好对人员的筛选?...其实我认为重点不是在于面试题目,而应该在于人员的接受度,在面临一个岗位时,是否能完成岗位所需的诸多事宜,是否能高效的优化在岗期间每个事务的工作流程,是否能改进现有的架构去推动升级等等。
在2019年MongoDB World大会上,CTO Eliot Horowitz介绍了MongoDB 4.2中的一些功能,这些功能扩展了其在数据库技术方面的领先地位:分布式事务(Distributed...由于某些特殊的法律所要求的严格性,可能有时候需要从数据库中安全地选取,查询和存储加密数据,而这些加密后的数据,数据库却不能读取解密,这个也就是客户端加密,严格保证数据库的安全性。 ?...如果你曾经手工写过数据库数据加密代码,肯定理解加密和解密,以及保证秘钥安全性等规则的复杂程度,数据库数据加密简单的对称加密很好理解,关键还涉及到秘钥的保存,安全性、以及加密算法和字段的灵活替换,还有客户端和数据库端如何做到加密解耦...当然如果你有更复杂的等保安全需求,可以联系我,也可以联系阿里云,中国唯一的通过等保三级和金融云等保4级的云计算公司。阿里云安全团队有丰富的经验可以帮助客户建立严格的安全系统,通过等保评审。...被攻击或者数据泄露多了一层防护,起码不会立即被破解,导致大规模的数据风险,又加上等保的法规,很多公司必须要做系统安全,这是不错的一个解决方案。 4.
第一步是将创建线程时传过来的任务执行( task.run),接着会一直不停的从队列里获取任务执行,直到获取不到新任务了。 任务执行完毕后将内置的计数器 -1 ,方便后面任务全部执行完毕进行通知。...很明显,核心作用就是从队列里获取任务;但有两个地方需要注意: 当线程数超过核心线程数时,在获取任务的时候需要通过保活时间从队列里获取任务;一旦获取不到任务则队列肯定是空的,这样返回 null 之后在上文的...而关闭线程通常又有以下两种: 立即关闭:执行关闭方法后不管现在线程池的运行状况,直接一刀切全部停掉,这样会导致任务丢失。 不接受新的任务,同时等待现有任务执行完毕后退出线程池。...比如这里我将队列大小调为 10 ,这样任务就会累计在队列里,不会创建五个 worker 线程。 所以一直都是 Thread-1~3 这三个线程在反复调度任务。...同时下次会分享一些线程池的新特性,如: 执行带有返回值的线程。 异常处理怎么办? 所有任务执行完怎么通知我?
近期公司在做一些后台架构方面的改造,例如对数据中心,数据采集/传输/清洗/存储方面的优化,因此,我想有必要了解一些其他公司是如何做系统架构和转型的,于是购买了这本书。...当集群因为不堪重负挂掉之后,此时又会面临一个重启的难题:除非5台同时启动,否则,当1台先启动时,就会立即因为过载而挂掉。因此,就需要先关闭前端的网关,待集群中的服务器全部启动后再打开。...常见的一种分表方式,就是对单号哈希后取模,例如分8张表,则对单号除以8,根据余数存到对应的表中。这种方式在对单号查询时异常迅速,因为只要根据单号得到要查询的分区表,然后去分表中查询就可以了。...执行实际的SQL语句,执行完成后,将修改后的记录保存一份,记为Redo。作为回滚前的校验(可能存在其他线程在回滚前将数据修改了,此时记录值将会与保存的Redo记录不一致)。...对于普通规模的公司而言,虽然不一定像阿里那样输出IT基础设施服务(云服务、数据库、缓存等),但是却可以将一些业务服务打包起来,向下游或者同业的小型公司输出,提升其开发效率和稳定性,做得好的话也是双赢的。
宕机能够刷到存在感 第一个是数据库宕机从技术角度之外有时候还是有一些作用的,那就是很多时候宕机之后大家会深刻感受到DBA的存在,而平素系统稳定了若干年,换谁都会认为这是一个可有可无的角色,直到业务中断...宕机原因其实有一些规律可循 第二个是数据库宕机其实都是有一些规律可循的,为什么很多服务器都是大半夜的时候宕机,服务器和人不同,不需要在哪个时间点睡觉,一种很可能的原因就是服务器在那个时间点更加繁忙...我再举一个例子,那就是数据同步,很多时候我发现数据库的负载突然会升高,可能就几分钟,但是提升幅度是在太大,不得不让人关注,我发现很多的数据同步逻辑竟然都是全量,全量的逻辑就是清理“旧”数据,然后重新插入数据...数据库中的蜘蛛网 其实让我说Oracle,我恨不得不要有DB link,因为有了这个对象,数据库之间会存在各种各样的关联关系,就好像复杂的蜘蛛网一样。...不能什么设计都一上来都是分布式,在数据架构中,有些数据集中式管理就是要好一些。 宕机后的窘态 宕机之后,如果准备不够充分,很可能有很多窘态。
本质 空间换时间 - 利用分布式下不同介质的快速存储设备,来替换数据库,加快系统的数据处理和响应速度。 就近原则 - 将数据缓存到离用户最近的位置;将数据缓存到离应用最近的位置。 二....于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。 ? 这种方式也是有数据不一致的场景存在,当然可以通过双删除的方式解决,即更新数据库后再删除一次缓存。...我为什么没有选择这种方式,主要还是因为,我觉得数据还是要以数据库的数据为准,缓存应该是个辅助,其操作成功不意味着最终真正的成功。写缓存失败就不再写数据库,虽然保证了原子性,但这种做法对比较影响业务。...命中:应用程序从cache中取数据,取到后返回。 更新:先把数据存到数据库中,成功后,再让缓存失 ? ?...补充 关于先更新数据库还是先删除缓存,这些还是要根据自己的业务场景、特点来选择。个人而言,我更加倾向于【先更新数据库,后删除缓存】的方式。
② 缓存 大多数系统都有一些读取密集型的交互,一些用户频繁访问但不经常更新的信息。将这些信息缓存起来可以方便获取,而不需要数据库查找。 ③ 数据库 没有某种形式的数据存储就没有系统。...你需要学习数据库选择、SQL/NoSQL、查询模式、CAP定理等。 ④ 消息队列 有时我们的系统需要执行一些不一定需要立即执行的任务。在这种情况下,使用消息队列比服务调用更有意义。...⑤ 内容分发网络(CDN) 当用户地理分布时,在合理时间内将内容传递给他们是一个真正的挑战。CDN允许我们在靠近用户位置的数据中心维护数据副本,以减少延迟。...我说练习了吗?有很多资源。我分享了一些详细讨论一些最受欢迎的系统设计问题的资源。当你完成一些后,你会开始注意到一个模式,并很快能够自己想出解决方案。 通过你的组织了解你的系统是如何设计的。...其他团队是如何做事的? 他们考虑哪些因素? 最好的另一件事是与朋友练习。在实际面试之前一定要进行几次模拟面试,以避免一些常见但很容易避免的陷阱。
2019年5月13日等保2.0正式发布,这是继2008年发布等保1.0十余年来继网络安全法实施后的一次重大升级。等保2.0在等保1.0的基础上,更加注重全方位主动防御、安全可信、动态感知和全面审计。...变化: 国家对访问控制的要求是明显做了颗粒度的细化,强调了主体跟客体以文件和数据库表及作为访问控制的目标对象,在等保1.0里是非常不明确甚至是没有提及的,这是个非常大的进步。...我们总结起来,在等保2.0下去做数据安全的建设, 主要从这四个方面去展开 用户行为鉴权(加强用户行为的鉴权) 数据访问控制(有效地建立起对数据访问控制机制) 敏感数据脱敏(对数据本身的一些使用和落盘的数据要做脱敏和加密...在不同的生命周期上,我们将通过不同的技术手手段去做我们的安全措施。...最后,在它获取到相应的权限之后,真正地从数据源从数据库里边去获取返回的时候,同样的我们通过我们刚才说了对等保2.0提到的对数据的字段级别的表管控和标签,我们对他所返回的数据可以提供一份非常良好的一个保护措施
如何沟通 我个人的理解,管理层能理解的价值或者说收益,最终是落到下面三个方面: 业务 数据 管理 我们的收益也要尽量可以落到上面几个方面,其中管理收益比较隐晦,数据收益往往最终体现在业务上,所以我们以业务收益展开...据知情人士称,机锋论坛泄露的2300万用户数据包括用户名、注册邮箱、加密后的密码等信息。...2016年9月23日,雅虎在新闻稿中说,至少5亿用户账户信息被黑客盗取,而这场史上最疯狂的数据泄露事件发生于2014年,除了电邮、出生日期等常规信息外,密保问题的答案,乃至一些个人专门开设的,毫无规律可循的二次加密密码也被盗取...如果你们的数据库记录了用户个人信息,家庭住址或者交易数据之类,部署WAF,WEB-IDS或者数据库审计就顺理成章了。...你做这些事情的收益就是,一旦被拖库,数据被泄露流入黑产: 业务层面,竞争对手可以针对性挖你客户,恶意PR宣传你们被拖库,造成商誉重大损失,尤其是电商和互联网金融怕这个,比如某电商大型促销活动前被爆密码泄漏
以下是SpiderLabs的分析: 在新保集团数据泄露事件发生后,我们立即展开了一些相关研究分析,最终发现了一些可能与此次网络攻击相关的其他证据片段。...我们的 SpiderLabs 团队发现了在两个不同时间点上传的两篇单独的 Pastebin 帖子,该两篇Pastebin帖子包含的信息,是一些对新保集团的数据库访问操作,其中一篇帖子罗列了Java服务器相关的异常日志...2018年6月15日 另外,SpiderLabs 团队还发现了一篇 6 月 15 日上传的 Pastebin 帖子,其中包含了一些新保集团数据库相关的SQL查询信息,这个帖子上传日期在两个关键时间点-6...在官方声称发生数据泄露事件时,我们发现了至少两个月前的这两条的线索信息: Java异常日志中表明,嫌疑人试图把新保集团(SingHealth)某个数据库访问权限委托授权给一名信息分包商员工; 在Pastebin...上识别了已经被删除的,针对新保集团(SingHealth)某个数据库医疗数据的SQL查询。
如何做呢?说一下原理?。 什么是高可用?可用性的判断标准是啥? 高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。...大家都喜欢谈限流、降级、熔断,但是我觉得从代码质量这个源头把关是首先要做好的一件很重要的事情。如何提高代码质量?...一般我们使用一些 RPC 框架的时候,这些框架都自带的超时重试的配置。如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法在处理请求。...但是,使用异步之后我们可能需要 适当修改业务流程进行配合,比如用户在提交订单之后,不能立即返回用户订单提交成功,需要在消息队列的订单消费者进程真正处理完该订单之后,甚至出库后,再通过电子邮件或短信通知用户订单成功...7.使用缓存 如果我们的系统属于并发量比较高的话,如果我们单纯使用数据库的话,当大量请求直接落到数据库可能数据库就会直接挂掉。使用缓存缓存热点数据,因为缓存存储在内存中,所以速度相当地快!
MySQL 驱动 我们的系统在和 MySQL 数据库进行通信的时候,总不可能是平白无故的就能接收和发送请求,就算是你没有做什么操作,那总该是有其他的“人”帮我们做了一些事情,基本上使用过 MySQL 数据库的程序员多多少少都会知道...undo log 就是没有发生事情(原本事情是什么)的一些日志 我们刚刚已经说了,在准备更新一条语句的时候,该条语句已经被加载到 Buffer pool 中了,实际上这里还有这样的操作,就是在将该条语句加载到...没错,目前这条数据就是脏数据,Buffer Pool 中的记录是小强 数据库中的记录是旺财 ,这种情况 MySQL是怎么处理的呢,继续往下看 redo 日志文件:记录数据被修改后的样子 除了从磁盘中加载文件和将操作前的记录保存到...好了,语句也更新好了那么需要将更新的值提交啊,也就是需要提交本次的事务了,因为只要事务成功提交了,才会将最后的变更保存到数据库,在提交事务前仍然会具有相关的其他操作 将 redo Log Buffer...Pool 中(这边我的理解是和 Redis 的持久化机制是差不多的,在 Redis 启动的时候会检查 rdb 或者是 aof 或者是两者都检查,根据持久化的文件来将数据恢复到内存中) 到此为止,从执行器开始调用存储引擎接口做了哪些事情呢
MySQL 驱动 -------- 我们的系统在和 MySQL 数据库进行通信的时候,总不可能是平白无故的就能接收和发送请求,就算是你没有做什么操作,那总该是有其他的“人”帮我们做了一些事情,基本上使用过...undo log 就是没有发生事情(原本事情是什么)的一些日志 我们刚刚已经说了,在准备更新一条语句的时候,该条语句已经被加载到 Buffer pool 中了,实际上这里还有这样的操作,就是在将该条语句加载到...好了,语句也更新好了那么需要将更新的值提交啊,也就是需要提交本次的事务了,因为只要事务成功提交了,才会将最后的变更保存到数据库,在提交事务前仍然会具有相关的其他操作 将 redo Log Buffer...Pool 中(这边我的理解是和 Redis 的持久化机制是差不多的,在 Redis 启动的时候会检查 rdb 或者是 aof 或者是两者都检查,根据持久化的文件来将数据恢复到内存中) 到此为止...是不是你也发现这个时候被更新记录仅仅是在内存中执行的,哪怕是宕机又恢复了也仅仅是将更新后的记录加载到Buffer Pool中,这个时候 MySQL 数据库中的这条记录依旧是旧值,也就是说内存中的数据在我们看来依旧是脏数据
领取专属 10元无门槛券
手把手带您无忧上云