Locker

Java分布式锁

独自空忆成欢 提交于 2021-02-17 16:50:56
分布式锁简述 在单机时代,虽然不存在分布式锁,但也会面临资源互斥的情况,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就需要对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种线程之间的锁机制,就没作用了,系统可能会有多份并且部署在不同的机器上,这些资源已经不是在线程之间共享了,而是属于进程之间共享的资源。因此,为了解决这个问题,「分布式锁」就强势登场了。 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。 分布式锁要满足哪些要求呢? 排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取 避免死锁:这把锁在一段有限的时间之后

Zookeeper面试题

我们两清 提交于 2021-01-19 07:08:01
1. ZooKeeper是什么? ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。 Zookeeper保证了如下分布式一致性特性: 顺序一致性 原子性 单一视图 可靠性 实时性(最终一致性) 客户端的读请求可以被集群中的任意一台机器处理, 如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理 。对于写请求,这些请求会同时发给其他zookeeper机器并且达成一致后,请求才会返回成功。因此,随着zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。 有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为zxid(Zookeeper Transaction Id)。而读请求只会相对于更新有序,也就是读请求的返回结果中会带有这个zookeeper最新的zxid。 2. ZooKeeper提供了什么? 1、文件系统 2、通知机制 3. Zookeeper文件系统

zookeeper面试题

房东的猫 提交于 2021-01-19 03:00:20
1.ZooKeeper是什么? ZooKeeper是一个 分布式 的,开放源码的分布式 应用程序协调服务 ,是Google的Chubby一个开源的实现,它是 集群的管理者 , 监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作 。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 客户端的 读请求 可以被集群中的 任意一台机器处理 ,如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理。对于 写请求 ,这些请求会同 时发给其他zookeeper机器并且达成一致后,请求才会返回成功 。因此,随着 zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降 。 有序性是zookeeper中非常重要的一个特性,所有的 更新都是全局有序的 ,每个更新都有一个 唯一的时间戳 ,这个时间戳称为 zxid(Zookeeper Transaction Id) 。而 读请求只会相对于更新有序 ,也就是读请求的返回结果中会带有这个 zookeeper最新的zxid 。 2.ZooKeeper提供了什么? 1、 文件系统 2、 通知机制 3.Zookeeper文件系统 Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点 都可以设置关联的数据

2020年勒索病毒事件盘点及未来发展趋势

流过昼夜 提交于 2021-01-14 18:13:23
简介: 在魔幻的2020年,从勒索病毒新面孔WannaRen火上热搜,到知名B站UP主被勒索后在线求助,可以看出勒索病毒依然是网络病毒中的“顶流”。 2020年,注定是要被历史铭记的一年,除了肆虐全球的新冠病毒,网络“疫情”也没有消停,各种新型勒索病毒不断涌现,黑客组织陆续壮大,甚至不少国外一些主流的勒索病毒运营团队在国内寻找勒索病毒分销运营商,通过暗网与国外运营商进行合作,进行勒索病毒的分发传播,谋取暴利。 一、2020年勒索病毒事件 在魔幻的2020年,从勒索病毒新面孔WannaRen火上热搜,到知名B站UP主被勒索后在线求助,可以看出勒索病毒依然是网络病毒中的“顶流”。下面我们来盘点部分2020年全球勒索病毒大事件。 3月,特斯拉、波音、洛克希德·马丁公司和SpaceX等行业巨头的精密零件供应商,总部位于科罗拉多州丹佛的Visser Precision遭受勒索软件DoppelPaymer攻击,黑客已经泄漏Visser Precision与特斯拉和SpaceX签署的保密协议。 4月,葡萄牙跨国能源公司(天然气和电力)EDP(Energias de Portugal)遭Ragnar Locker勒索软件攻击,10TB的敏感数据文件遭泄,赎金高达1090万美金。根据EDP加密系统上的赎金记录,攻击者能够窃取有关账单、合同、交易、客户和合作伙伴的机密信息。 6月

c#多线程

点点圈 提交于 2021-01-13 06:25:22
概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。这里的一个简单的例子及其输出: 除非被指定,否则所有的例子都假定以下命名空间被引用了: using System; using System.Threading; class ThreadTest { static void Main() { Thread t = new Thread (WriteY); t.Start(); // 在新的线程中运行WriteY while (true) Console.Write ("x"); // 不停地写'x' } static void WriteY() { while (true) Console.Write ("y"); // 不停地写'y' } } xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyy yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxx

漫画:如何证明sleep不释放锁,而wait释放锁?

五迷三道 提交于 2021-01-08 20:46:39
wait 加锁示例 public class WaitDemo { private static Object locker = new Object(); public static void main (String[] args) throws InterruptedException { WaitDemo waitDemo = new WaitDemo(); // 启动新线程,防止主线程被休眠 new Thread(() -> { try { waitDemo.doWait(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); Thread.sleep( 200 ); // 此行本身没有意义,是为了确保 wait() 先执行再执行 notify() waitDemo.doNotify(); } /** * 执行 wait() */ private void doWait () throws InterruptedException { synchronized (locker) { System.out.println( "wait start." ); locker.wait(); System.out.println( "wait end." ); } } /** * 执行

不可区分混淆被实现,计算机科学家摘得这颗密码学「皇冠上的明珠」

泪湿孤枕 提交于 2020-11-13 09:55:30
iO(Indistinguishability Obfuscation,不可区分混淆)是密码学中黑科技一样的存在,但很多人认为它并不存在。最近,一些研究人员提出了新的 iO 协议。 机器之心报道,编辑:魔王、小舟。 2018 年,加州大学洛杉矶分校博士生 Aayush Jain 前往日本演讲,介绍他和同事正在开发的一款强大的加密工具。在他陈述团队在 iO 方面的努力时,有观众提问:「我认为 iO 不存在。」 当时,这种看法较为普遍。如果 iO 确实存在, 它不仅可以隐藏数据集合,还可以隐藏计算机程序的内部工作机制 ,创造出强大的加密工具。哈佛大学计算机科学教授 Boaz Barak 表示,这是「掌控一切的密码学原语」,而这种力量的强大让人们怀疑 iO 是否真的存在。 2013 年,计算机科学家 Sanjam Garg、Amit Sahai 等人首次提出 iO 的候选版本,后来其他研究者找出了对其安全性进行攻击的方法。「谁将赢得胜利, the makers or the breakers?」 加州大学伯克利分校西蒙斯计算理论研究所负责人 Shafi Goldwasser 表示:「当时很多人对此很狂热,他们相信 iO 的存在,并坚持研究。但后来这些人越来越少了。」 而近期,Aayush Jain 与华盛顿大学副教授 Huijia Lin、Jain 的导师 Amit Sahai

goroutine间的同步&协作

假如想象 提交于 2020-11-01 19:04:39
Go语言中的同步工具 基础概念 竞态条件(race condition) 一份数据被多个线程共享,可能会产生争用和冲突的情况。这种情况被称为竞态条件,竞态条件会破坏共享数据的一致性,影响一些线程中代码和流程的正确执行。 同步 同步可以解决竞态问题。它本质上是在控制多个线程对共享资源的访问。这种控制主要包含两点: 避免多个线程在同一时刻操作同一个数据块。 协调多个线程,以避免它们在同一时刻执行同一个代码块。 在同步控制下,多个并发运行的线程对这个共享资源的访问是完全串行的。对这个共享资源进行操作的代码片段可以视为一个临界区。 互斥量sync.Mutex 一个互斥锁可以被用来保护一个临界区或者一组相关临界区。它可以保证,在同一时刻只有一个 goroutine 处于该临界区之内。 每当有 goroutine 想进入临界区时,都需要先加锁,每个 goroutine 离开临界区时,都要及时解锁。 Mutex的使用 var mutex sync.Mutex func updatePublicResource() { mutex.Lock() doUpdate() mutex.Unlock() } 使用互斥锁的注意事项: 不要重复锁定互斥锁。 不要忘记解锁互斥锁,推荐使用defer。 不要对尚未锁定或者已解锁的互斥锁解锁。 不要在多个函数之间直接传递互斥锁。(即,不要复制锁)

.netCore 引用第三方ORM中间件-Dapper

夙愿已清 提交于 2020-10-17 09:04:57
十年河东,十年河西,莫欺少年穷 学无止境,精益求精 可恶的NetCore对DataTable支持的不好,这对于喜欢直接写SQL的童鞋来说非常难受,因此,在NetCore项目中有必要引入优秀的第三方数据库中间件,目前市场上比较优秀的第三方EF框架有很多,例如: Sqlsugar 、 Dapper 、 FreeSql 等,当然,微软也有自己的一套EF框架,EntityFrm 和 EfCore,就效率而言,第三方的框架要完胜微软的EF框架,真不知道微软是干啥吃的、 今天,我们使用Dapper这个轻量级的第三方EF框架。 1.安装Dapper   这里直接使用Nuget安装。 安装完成后,我们需要对Dapper进行扩展,如下: using Microsoft.Extensions.Configuration; using System; using System.Data; using System.Data.SqlClient; using WuAnCommon; namespace WuAnSqlService { public class DapperHelper { /// 获取连接字符串 private static string Connection= ConfigCommon.Get( " WuAnDBContext " ); /// 返回连接实例 private

漫画:如何证明sleep不释放锁,而wait释放锁?

丶灬走出姿态 提交于 2020-09-24 06:01:40
wait 加锁示例 public class WaitDemo { private static Object locker = new Object(); public static void main (String[] args) throws InterruptedException { WaitDemo waitDemo = new WaitDemo(); // 启动新线程,防止主线程被休眠 new Thread(() -> { try { waitDemo.doWait(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); Thread.sleep(200); // 此行本身没有意义,是为了确保 wait() 先执行再执行 notify() waitDemo.doNotify(); } /** * 执行 wait() */ private void doWait() throws InterruptedException { synchronized (locker) { System.out.println("wait start."); locker.wait(); System.out.println("wait end."); } } /** * 执行 notify()