精华内容
下载资源
问答
  • 众所周知,云计算和开源是相爱相生的关系,借助开源社区的力量,云计算技术迅速占领市场,不过常用的云计算开源工具有哪些呢? 1、Kubernetes 过去两年Kuberentes已成为火爆的开源项目之一,相信在未来Kuberentes的...

    随着互联网的高速发展以及国家政策扶持,我国云计算行业发展迅猛,云计算人才也成为稀缺人才。众所周知,云计算和开源是相爱相生的关系,借助开源社区的力量,云计算技术迅速占领市场,不过常用的云计算开源工具有哪些呢?

    1、Kubernetes

    过去两年Kuberentes已成为火爆的开源项目之一,相信在未来Kuberentes的势头会更劲,其拥有大量的扩展工具,其优势在于:

    1)通过基于角色的访问控制可以更好地支持企业部署;

    2)将Kuberentes从单一用户操作系统转移到Unix;

    3)支持在Kubernetes管理的容器和容器中运行有状态应用。

    除了Kuberentes容器调度器外,CNCF(云原生基金会)还提供了一套广泛的兼容工具,用于操作和交付现代分布式系统,这些组合创建的功能可以扩展到成千上万个自修复的多租户节点上,同时还可以实现操作上的差异。

     

    2、Fluentd

    Fluentd是一个免费,而且完全开源的日志管理工具,简化了日志的收集、处理、和存储,可以不需要在维护编写特殊的日志处理脚本。Fluentd的性能已经在各领域得到了证明:目前最大的用户从5000+服务器收集日志,每天5TB的数据量,在高峰时间处理50000条信息每秒。

    3、Prometheus

    Prometheus(简称Prom)前身是SoundCloud的告警工具包,现已演化成一个独立的开源监控系统。它是一种度量标准的监控系统,旨在为监视服务提供云本地的方法。主要特性:1)多维度数据模型;2)时间序列数据通过metric名和键值对来区分,所有的metrics都可以设置任意的多维标签;3)数据模型随意,不需要刻意设置为以点分隔的字符串等。

    4、Linkerd

    Linkerd是一款开源网络代理,旨在作为服务网格进行部署:专用层,用于在应用程序内管理,控制和监视服务到服务的通信。通过为服务提供统一,统一的仪器和控制层,Linkerd免费服务所有者选择最适合其服务的语言。通过将通信机制与应用程序代码分离,Linkerd允许在不改变应用程序本身的情况下查看和控制这些机制。

    5、CoreDNS

    CoreDNS的前身是SkyDNS,它的主要目的是构建一个快速灵活的DNS服务器,让用户可以通过不同方式访问和使用DNS内的数据。它被设计为Caddy网络服务的一个服务器插件。CoreDNS的每个特性都可以被实现为可插拔的中间件,如日志、基于文件的DNS以及多种后端技术,进而可以拼接多个插件来创建定制化的管道。CoreDNS已经得到扩展,可以直接被Kubernetes访问服务数据,并以KubeDNS的形式提供给用户使用。

     

    当然,除了以上工具,比较常用的云计算开源工具还包括Containerd、gRPC、OpenTracing等。熟练掌握各种开源工具会让你在求职时更具优势!

    展开全文
  • 身份认证与访问控制

    2021-05-07 12:38:55
    身份认证:是对实体身份证实,用以识别合法或者非法实体,阻止非法实体假冒合法实体窃取或者访问网络资源。古代很多身份认证,如悬赏告示,玄奘公关文牒,签字画押,免死金牌,生辰八字,定情信物等等。 ...

    身份认证:是对实体身份的证实,用以识别合法或者非法的实体,阻止非法实体假冒合法实体窃取或者访问网络资源。古代有很多的身份认证,如悬赏告示,玄奘的公关文牒,签字画押,免死金牌,生辰八字,定情信物等等。

    典型的身份认证机密:口令、提问、令牌、智能卡、手机、身份证、指纹、DNA。很多情况下需要双因素或多因素认证。

    常用认证方式:静态口令,动态口令,密保问题,图形验证,各类证件,各类卡片,手机sim卡。还有生物认证。

    生物认证:基于个人独特的生理和行为特征进行自动身份认证技术。哪些生物特征可以用来证明呢?比如人脸,热量图,指纹,掌纹手形,静脉,血管分布,虹膜,视网膜,签名,语音等。

    生物认证优点:普遍性,方便性,不可复制性,高安全性,生物认证技术能够提供主动监控技术。

    身份认证通过之后,还需要对用户进行进一步的限制,就是确定其在系统中的权限。

    基于角色的访问控制,把许可权与角色或用户组联系在一起,用户通过充当合适的角色而获得该角色的许可权。

    RBAC是一种非自主型的访问控制模式,在大多数信息管理系统中,角色由系统管理员创建、删除、修改和定义权利。用户被分配为某个角色后拥有其权利与责任,但是不能自主地决定为角色增加或减少权利,也不能把自己角色的权利转授给其他用户。

    1.数字签名的概念
    数字签名又称公钥数字签名或电子签章,是以电子形式存储于信息中或以附件或逻辑上关联数据, 用于辨识数据签署人身份,表明签署人对数据中所包含信息的认可。

    基于公钥或私钥密码体制都可获得数字签名,目前主要是基于公钥密码体制数字签名。包括普通数字签名和特殊数字签名两种。

    2.数字签名的方法和功能
    主要方法1基于PKI的公钥密码技术的数字签名;2用一个以生物特征统计学为基础的识别标识,如手书签名和图章的电子图像的模式识别;3手印、声音印记或视网膜扫描的识别;4一个让收件人能识别发件人身份的密码代号、密码或个人识别码PIN;5基于量子计算机文件等。比较成熟的、使用方便具有可操作性的、在世界先进国家和普遍使用电子签名技术基于PKI的数字签名技术。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    MySql的用户管理是通过 User表来实现的,添加新用户常用的方法两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...
  • 1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘

    1.Redis 是一个基于内存的高性能key-value数据库。

    2.Redis相比memcached有哪些优势:

    • memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
    • redis的速度比memcached快很多
    • redis可以持久化其数据

    3.Redis是单线程

    redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销

    4.Reids常用5种数据类型

    • string,list,set,sorted set,hash

    6.Reids6种淘汰策略:

    • noeviction: 不删除策略, 达到最大内存限制时, 如果需要更多内存, 直接返回错误信息。大多数写命令都会导致占用更多的内存(有极少数会例外。
    • **allkeys-lru:**所有key通用; 优先删除最近最少使用(less recently used ,LRU) 的 key。
    • **volatile-lru:**只限于设置了 expire 的部分; 优先删除最近最少使用(less recently used ,LRU) 的 key。
    • **allkeys-random:**所有key通用; 随机删除一部分 key。
    • volatile-random: 只限于设置了 expire 的部分; 随机删除一部分 key。
    • volatile-ttl: 只限于设置了 expire 的部分; 优先删除剩余时间(time to live,TTL) 短的key。

    7.Redis的并发竞争问题如何解决?

    单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,利用setnx实现锁。

    8.Redis是使用c语言开发的。

    9.Redis前端启动命令

    ./redis-server

    10.Reids支持的语言:

    java、C、C#、C++、php、Node.js、Go等。

    11.Redis 持久化方案:

    Rdb 和 Aof

    12.Redis 的主从复制

    持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,

    13.Redis是单线程的,但Redis为什么这么快?

    1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);

    2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;

    3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

    4、使用多路I/O复用模型,非阻塞IO;这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程

    5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

    14.为什么Redis是单线程的?

    Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。

    15.Redis info查看命令:info memory

    16.Redis内存模型

    used_memory:Redis分配器分配的内存总量(单位是字节),包括使用的虚拟内存(即swap);Redis分配器后面会介绍。used_memory_human只是显示更友好。

    used_memory_rss**:**Redis进程占据操作系统的内存(单位是字节),与top及ps命令看到的值是一致的;除了分配器分配的内存之外,used_memory_rss还包括进程运行本身需要的内存、内存碎片等,但是不包括虚拟内存。

    mem_fragmentation_ratio**:**内存碎片比率,该值是used_memory_rss / used_memory的比值。

    mem_allocator**:**Redis使用的内存分配器,在编译时指定;可以是 libc 、jemalloc或者tcmalloc,默认是jemalloc;截图中使用的便是默认的jemalloc。

    17.Redis内存划分

    数据

    作为数据库,数据是最主要的部分;这部分占用的内存会统计在used_memory中。

    进程本身运行需要的内存

    Redis主进程本身运行肯定需要占用内存,如代码、常量池等等;这部分内存大约几兆,在大多数生产环境中与Redis数据占用的内存相比可以忽略。这部分内存不是由jemalloc分配,因此不会统计在used_memory中。

    缓冲内存

    缓冲内存包括客户端缓冲区、复制积压缓冲区、AOF缓冲区等;其中,客户端缓冲存储客户端连接的输入输出缓冲;复制积压缓冲用于部分复制功能;AOF缓冲区用于在进行AOF重写时,保存最近的写入命令。在了解相应功能之前,不需要知道这些缓冲的细节;这部分内存由jemalloc分配,因此会统计在used_memory中。

    内存碎片

    内存碎片是Redis在分配、回收物理内存过程中产生的。例如,如果对数据的更改频繁,而且数据之间的大小相差很大,可能导致redis释放的空间在物理内存中并没有释放,但redis又无法有效利用,这就形成了内存碎片。内存碎片不会统计在used_memory中。

    18.Redis对象有5种类型

    无论是哪种类型,Redis都不会直接存储,而是通过redisObject对象进行存储。

    19.Redis没有直接使用C字符串

    (即以空字符’\0’结尾的字符数组)作为默认的字符串表示,而是使用了SDS。SDS是简单动态字符串(Simple Dynamic String)的缩写。

    20.Reidis的SDS在C字符串的基础上加入了free和len字段

    21.Reids主从复制

    复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

    22.Redis哨兵

    在复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。

    23.Reids持久化触发条件

    RDB持久化的触发分为手动触发和自动触发两种。

    24.Redis 开启AOF

    Redis服务器默认开启RDB,关闭AOF;要开启AOF,需要在配置文件中配置:

    appendonly yes

    25.AOF常用配置总结

    下面是AOF常用的配置项,以及默认值;前面介绍过的这里不再详细介绍。

    • appendonly no:是否开启AOF
    • appendfilename "appendonly.aof":AOF文件名
    • dir ./:RDB文件和AOF文件所在目录
    • appendfsync everysec:fsync持久化策略
    • no-appendfsync-on-rewrite no:AOF重写期间是否禁止fsync;如果开启该选项,可以减轻文件重写时CPU和硬盘的负载(尤其是硬盘),但是可能会丢失AOF重写期间的数据;需要在负载和安全性之间进行平衡
    • auto-aof-rewrite-percentage 100:文件重写触发条件之一
    • auto-aof-rewrite-min-size 64mb:文件重写触发提交之一
    • aof-load-truncated yes:如果AOF文件结尾损坏,Redis启动时是否仍载入AOF文件

    26.RDB和AOF的优缺点

    RDB持久化

    优点:RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比,RDB最重要的优点之一是对性能的影响相对较小。

    缺点:RDB文件的致命缺点在于其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此AOF持久化成为主流。此外,RDB文件需要满足特定格式,兼容性差(如老版本的Redis不兼容新版本的RDB文件)。

    AOF持久化

    与RDB持久化相对应,AOF的优点在于支持秒级持久化、兼容性好,缺点是文件大、恢复速度慢、对性能影响大。

    27.持久化策略选择

    (1)如果Redis中的数据完全丢弃也没有关系(如Redis完全用作DB层数据的cache),那么无论是单机,还是主从架构,都可以不进行任何持久化。

    (2)在单机环境下(对于个人开发者,这种情况可能比较常见),如果可以接受十几分钟或更多的数据丢失,选择RDB对Redis的性能更加有利;如果只能接受秒级别的数据丢失,应该选择AOF。

    (3)但在多数情况下,我们都会配置主从环境,slave的存在既可以实现数据的热备,也可以进行读写分离分担Redis读请求,以及在master宕掉后继续提供服务。

    28.redis缓存被击穿处理机制

    使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法

    29.Redis还提供的高级工具

    像慢查询分析、性能测试、Pipeline、事务、Lua自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo等个性化功能。

    30.Redis常用管理命令

    # dbsize 返回当前数据库 key 的数量。
    # info 返回当前 redis 服务器状态和一些统计信息。
    # monitor 实时监听并返回redis服务器接收到的所有请求信息。
    # shutdown 把数据同步保存到磁盘上,并关闭redis服务。
    # config get parameter 获取一个 redis 配置参数信息。(个别参数可能无法获取)
    # config set parameter value 设置一个 redis 配置参数信息。(个别参数可能无法获取)
    # config resetstat 重置 info 命令的统计信息。(重置包括:keyspace 命中数、
    # keyspace 错误数、 处理命令数,接收连接数、过期 key 数)
    # debug object key 获取一个 key 的调试信息。
    # debug segfault 制造一次服务器当机。
    # flushdb 删除当前数据库中所有 key,此方法不会失败。小心慎用
    # flushall 删除全部数据库中所有 key,此方法不会失败。小心慎用
    

    31.Reids工具命令

    #redis-server:Redis 服务器的 daemon 启动程序
    #redis-cli:Redis 命令行操作工具。当然,你也可以用 telnet 根据其纯文本协议来操作
    #redis-benchmark:Redis 性能测试工具,测试 Redis 在你的系统及你的配置下的读写性能
    $redis-benchmark -n 100000 –c 50
    #模拟同时由 50 个客户端发送 100000 个 SETs/GETs 查询
    #redis-check-aof:更新日志检查
    #redis-check-dump:本地数据库检查
    

    32.为什么需要持久化?

    由于Redis是一种内存型数据库,即服务器在运行时,系统为其分配了一部分内存存储数据,一旦服务器挂了,或者突然宕机了,那么数据库里面的数据将会丢失,为了使服务器即使突然关机也能保存数据,必须通过持久化的方式将数据从内存保存到磁盘中。

    33.判断key是否存在

    exists key +key名字

    34.删除key

    del key1 key2 ...
    

    35.缓存和数据库间数据一致性问题

    分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。我们只能采取合适的策略来降低缓存和数据库间数据不一致的概率,而无法保证两者间的强一致性。合适的策略包括 合适的缓存更新策略,更新数据库后要及时更新缓存、缓存失败时增加重试机制,例如MQ模式的消息队列。

    36.布隆过滤器

    bloomfilter就类似于一个hash set,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个key是否存在于某容器,不存在就直接返回。布隆过滤器的关键就在于hash算法和容器大小

    37.缓存雪崩问题

    存在同一时间内大量键过期(失效),接着来的一大波请求瞬间都落在了数据库中导致连接异常。

    解决方案:

    1、也是像解决缓存穿透一样加锁排队。

    2、建立备份缓存,缓存A和缓存B,A设置超时时间,B不设值超时时间,先从A读缓存,A没有读B,并且更新A缓存和B缓存;

    38.缓存并发问题

    这里的并发指的是多个redis的client同时set key引起的并发问题。比较有效的解决方案就是把redis.set操作放在队列中使其串行化,必须的一个一个执行,具体的代码就不上了,当然加锁也是可以的,至于为什么不用redis中的事务,留给各位看官自己思考探究。

    39.Redis分布式

    redis支持主从的模式。原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。

    这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务。这样可以有效减少单个机器的并发访问数量

    40.读写分离模型

    通过增加Slave DB的数量,读的性能可以线性增长。为了避免Master DB的单点故障,集群一般都会采用两台Master DB做双机热备,所以整个集群的读和写的可用性都非常高。读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力,而且对于Write-intensive类型的应用,读写分离架构并不适合。

    41.数据分片模型

    为了解决读写分离模型的缺陷,可以将数据分片模型应用进来。

    可以将每个节点看成都是独立的master,然后通过业务实现数据分片。

    结合上面两种模型,可以将每个master设计成由一个master和多个slave组成的模型。

    42. redis常见性能问题和解决方案:

    Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

    如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

    为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

    尽量避免在压力很大的主库上增加从库

    43.redis通讯协议

    RESP 是redis客户端和服务端之前使用的一种通讯协议;RESP 的特点:实现简单、快速解析、可读性好

    44.Redis分布式锁实现

    先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。**如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?**set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!

    45.Redis做异步队列

    一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。缺点:在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。**能不能生产一次消费多次呢?**使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

    46.Redis中海量数据的正确操作方式

    利用SCAN系列命令(SCAN、SSCAN、HSCAN、ZSCAN)完成数据迭代。

    47.SCAN系列命令注意事项

    • SCAN的参数没有key,因为其迭代对象是DB内数据;
    • 返回值都是数组,第一个值都是下一次迭代游标;
    • 时间复杂度:每次请求都是O(1),完成所有迭代需要O(N),N是元素数量;
    • 可用版本:version >= 2.8.0;

    48.Redis 管道 Pipeline

    在某些场景下我们在一次操作中可能需要执行多个命令,而如果我们只是一个命令一个命令去执行则会浪费很多网络消耗时间,如果将命令一次性传输到 Redis中去再执行,则会减少很多开销时间。但是需要注意的是 pipeline中的命令并不是原子性执行的,也就是说管道中的命令到达 Redis服务器的时候可能会被其他的命令穿插

    49.事务不支持回滚

    50.手写一个 LRU 算法

    class LRUCache<K, V> extends LinkedHashMap<K, V> {
        private final int CACHE_SIZE;
    
        /**
         * 传递进来最多能缓存多少数据
         *
         * @param cacheSize 缓存大小
         */
        public LRUCache(int cacheSize) {
            // true 表示让 linkedHashMap 按照访问顺序来进行排序,最近访问的放在头部,最老访问的放在尾部。
            super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);
            CACHE_SIZE = cacheSize;
        }
    
        @Override
        protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
            // 当 map中的数据量大于指定的缓存个数的时候,就自动删除最老的数据。
            return size() > CACHE_SIZE;
        }
    }
    

    51.多节点 Redis 分布式锁:Redlock 算法

    获取当前时间(start)。

    依次向 N 个 Redis节点请求锁。请求锁的方式与从单节点 Redis获取锁的方式一致。为了保证在某个 Redis节点不可用时该算法能够继续运行,获取锁的操作都需要设置超时时间,需要保证该超时时间远小于锁的有效时间。这样才能保证客户端在向某个 Redis节点获取锁失败之后,可以立刻尝试下一个节点。

    计算获取锁的过程总共消耗多长时间(consumeTime = end - start)。如果客户端从大多数 Redis节点(>= N/2 + 1) 成功获取锁,并且获取锁总时长没有超过锁的有效时间,这种情况下,客户端会认为获取锁成功,否则,获取锁失败。

    如果最终获取锁成功,锁的有效时间应该重新设置为锁最初的有效时间减去 consumeTime。

    如果最终获取锁失败,客户端应该立刻向所有 Redis节点发起释放锁的请求。

    52.Redis 中设置过期时间主要通过以下四种方式

    • expire key seconds:设置 key 在 n 秒后过期;
    • pexpire key milliseconds:设置 key 在 n 毫秒后过期;
    • expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期;
    • pexpireat key millisecondsTimestamp:设置 key 在某个时间戳(精确到毫秒)之后过期;

    53.Reids三种不同删除策略

    定时删除:在设置键的过期时间的同时,创建一个定时任务,当键达到过期时间时,立即执行对键的删除操作

    惰性删除:放任键过期不管,但在每次从键空间获取键时,都检查取得的键是否过期,如果过期的话,就删除该键,如果没有过期,就返回该键

    定期删除:每隔一点时间,程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

    54.定时删除

    • **优点:**对内存友好,定时删除策略可以保证过期键会尽可能快地被删除,并释放国期间所占用的内存
    • **缺点:**对cpu时间不友好,在过期键比较多时,删除任务会占用很大一部分cpu时间,在内存不紧张但cpu时间紧张的情况下,将cpu时间用在删除和当前任务无关的过期键上,影响服务器的响应时间和吞吐量

    55.定期删除

    由于定时删除会占用太多cpu时间,影响服务器的响应时间和吞吐量以及惰性删除浪费太多内存,有内存泄露的危险,所以出现一种整合和折中这两种策略的定期删除策略。

    1. 定期删除策略每隔一段时间执行一次删除过期键操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。
    2. 定时删除策略有效地减少了因为过期键带来的内存浪费。

    56.惰性删除

    • **优点:**对cpu时间友好,在每次从键空间获取键时进行过期键检查并是否删除,删除目标也仅限当前处理的键,这个策略不会在其他无关的删除任务上花费任何cpu时间。
    • **缺点:**对内存不友好,过期键过期也可能不会被删除,导致所占的内存也不会释放。甚至可能会出现内存泄露的现象,当存在很多过期键,而这些过期键又没有被访问到,这会可能导致它们会一直保存在内存中,造成内存泄露。

    57.Reids 管理工具:Redis Manager 2.0

    github地址

    58.Redis常见的几种缓存策略

    • Cache-Aside
    • Read-Through
    • Write-Through
    • Write-Behind

    59.Redis Module 实现布隆过滤器

    Redis module 是Redis 4.0 以后支持的新的特性,这里很多国外牛逼的大学和机构提供了很多牛逼的Module 只要编译引入到Redis 中就能轻松的实现我们某些需求的功能。在Redis 官方Module 中有一些我们常见的一些模块,我们在这里就做一个简单的使用。

    • neural-redis 主要是神经网络的机器学,集成到redis 可以做一些机器训练感兴趣的可以尝试
    • RedisSearch 主要支持一些富文本的的搜索
    • RedisBloom 支持分布式环境下的Bloom 过滤器

    60.Redis 到底是怎么实现“附近的人”

    使用方式

    GEOADD key longitude latitude member [longitude latitude member ...]
    

    将给定的位置对象(纬度、经度、名字)添加到指定的key。其中,key为集合名称,member为该经纬度所对应的对象。在实际运用中,当所需存储的对象数量过多时,可通过设置多key(如一个省一个key)的方式对对象集合变相做sharding,避免单集合数量过多。

    成功插入后的返回值:

    (integer) N
    

    其中N为成功插入的个数。

     

    展开全文
  •  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: ...
  • ACL访问控制类表 • ACL是由permit或deny语句组成一系列顺序规则集合,它通过匹配报文信息实现对报文分类。路由器根据ACL定义规则判断哪些报文可以接收,哪些报文需要拒绝,从而实现对报文过滤。 • ...

    概述:

    常用的路由选择工具:过滤器,只匹配,不调用就不会生效。
    在这里插入图片描述

    1. ACL访问控制类表
      • ACL是由permit或deny语句组成的一系列有顺序规则的集合,它通过匹配报文的信息实现对报文的分类。路由器根据ACL定义的规则判断哪些报文可以接收,哪些报文需要拒绝,从而实现对报文的过滤。
      • ACL通过配置的一系列匹配规则对特定的数据包进行过滤,从而识别需要过滤的对象。然后,根据预先设定的策略允许或禁止相应的数据包通过。同时,ACL可以作为基础配置被其他功能模块引用。
    2. ip-prefix前缀类表
      • ip-prefix将路由条目与前缀过滤列表的每一项进行匹配,然后根据定义的匹配模式进行过滤,达成路由筛选的目的。
      • ip-prefix不能用来过滤数据包,只能过滤路由信息。
      • ip-prefix因为只能匹配源地址,但是能够设定掩码的范围,所以可以理解为高级ACL
    3. as-path-filter AS路径过滤器
      • BGP的路由信息中,包含一个自治系统路径域。As-path-filter就是针对自治系统路径域指定匹配条件。AS路径过滤器仅应用于BGP协议。
    4. community-filter团体属性过滤器
      • BGP的路由信息中,可以携带一个或多个团体属性,团体属性过滤器就针对团体属性域指定匹配条件。

    后面两种工具在BGP笔记种分析,这里详细介绍ACL、前缀列表(下个笔记)的应用。

    ACL:

    ACL,是Access Control List的简称,中文名称叫“访问控制列表”,它由一系列规则(即描述报文匹配条件的判断语句)组成。这些条件,可以是报文的源地址、目的地址、端口号等。

    打个比方,ACL其实是一种报文过滤器,ACL规则就是过滤器的滤芯。安装什么样的滤芯(即根据报文特征配置相应的ACL规则),ACL就能过滤出什么样的报文了。

    基于过滤出的报文,我们能够做到阻塞攻击报文、为不同类报文流提供差分服务、对Telnet登录/FTP文件下载进行控制等等,从而提高网络环境的安全性和网络传输的可靠性。

    ACL结构:

    在这里插入图片描述
    步长:
    在这里插入图片描述
    步长,是指系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值。也就是说,系统是根据步长值自动为ACL规则分配编号的。
    图中的ACL 2000,步长就是5(默认值)。系统按照5、10、15…这样的规律为ACL规则分配编号。如果将步长调整为了2,那么规则编号会自动从步长值开始重新排列,变成2、4、6…。
    ACL的缺省步长值是5。通过display acl acl-number命令,可以查看ACL规则、步长等配置信息。通过step step命令,可以修改ACL步长值。

    实际上,设置步长的目的,是为了方便大家在ACL规则之间插入新的规则。
    如果ACL规则之间间隔不是5,而是1(rule 1、rule 2、rule 3…),这时再想插入新的规则,该怎么办呢?只能先删除已有的规则,然后再配置新规则,最后将之前删除的规则重新配置回来。如果这样做,那付出的代价可真是太大了。

    所以,通过设置ACL步长,为规则之间留下一定的空间,后续再想插入新的规则,就非常轻松了。

    ACL的匹配规则:

    报文到达设备时,设备从报文中提取信息,并将该信息与ACL中的规则进行匹配,只要有一条规则和报文匹配,就停止查找,称为命中规则。查找完所有规则,如果没有符合条件的规则,称为未命中规则。
    ACL的规则分为“permit”(允许)规则和“deny”(拒绝)规则。
    综上所述,ACL可以将报文分成三类:
    • 命中“permit”规则的报文
    • 命中“deny”规则的报文
    • 未命中规则的报文,华为ACL缺省隐含最后一条规则为permit,思科默认不通过。
    每条规则都拥有自己的规则编号,如5、10、4294967294。这些编号,可以自行配置,也可以由系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。所以,上图中我们可以看到rule 5排在首位,而规则编号最大的rule 4294967294排在末位。系统按照规则编号从小到大的顺序,将规则依次与报文匹配,一旦匹配上一条规则即停止匹配。不同的编号代表的一样都相同吗?当然不是,不同范围编号的ACL有着不一样的功能,也就是它们属于不同的ACL。你可以选择二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型)作为匹配选项,也可以选择三层报文信息(如源地址、目的地址、协议类型)作为匹配选项,还可以选择四层报文信息(如TCP/UDP端口号)等等。

    图解如下:
    在这里插入图片描述

    ACL的分类:

    首先,ACL可以为数字型,这类似于人类的身份证号,用于唯一标识自己的身份。当然,人类的身份证上不仅有身份证编号,还有每个人自己的名字。ACL也同样如此,除了数字型ACL,还有一种叫做命名型的ACL,它就能拥有自己的ACL名称。通过名称代替编号来定义ACL,就像用域名代替IP地址一样,可以方便记忆,也让大家更容易识别此ACL的使用目的。
    在这里插入图片描述

    实际上,按照ACL规则功能的不同,ACL被划分为基本ACL、高级ACL、二层ACL、用户自定义ACL和用户ACL这五种类型。每种类型ACL对应的编号范围是不同的。ACL 2000属于基本ACL,ACL 3998属于高级ACL。高级ACL可以定义比基本ACL更准确、更丰富、更灵活的规则,所以高级ACL的功能更加强大。具体分类如下:
    在这里插入图片描述

    基本ACL和基本ACL6、高级ACL和高级ACL6对应的编号可以相同,二者互不影响。IPV6中因为没有ARP报文,所以也没有对应的ARP ACL,其他ACL和IPv4相同。那么命名型ACL是属于哪种ACL呢?
    在这里插入图片描述
    在这里插入图片描述
    我们可以看到,命名型ACL其实只是给ACL取了一个名字的,但是到底具有什么功能还是需要自己配置相应的编号。如果不配置相应的编号,默认都是高级ACL,并且从3999依次递减。

    注意:ACL的名称对于ACL全局唯一,但允许基本ACL与基本ACL6,高级ACL与高级ACL6使用相同的名称。

    ACL的匹配顺序:

    虽然我们之前介绍的ACL匹配顺序都是通过序号由上到下进行匹配的,但是在华为的路由器中(交换机中没有)还有一种ACL的匹配顺序的方式:
    在这里插入图片描述
    自动排序(auto)

    1. 自动排序(auto)使用“深度优先”的原则进行匹配。
    2. “深度优先”即根据规则的精确度排序,匹配条件(如协议类型、源和目的IP 地址范围等)限制越严格越精确。例如可以比较地址的反掩码,反掩码越小,则指定的主机的范围就越小,限制就越严格。
    3. 若“深度优先”的顺序相同,则匹配该规则时按rule-id从小到大排列。

    深度排序,可以称为傻瓜式排序,系统自动把范围最精细的排在前面,不需要工程师去设计匹配的顺序,比较方便。

    [Huawei]acl 2000 match-order auto //默认情况下是匹配顺序config排序
    例如:例如,在auto模式的acl 3001中,存在以下两条规则。
    在这里插入图片描述

    如果在acl 3001中插入rule deny ip destination 1.1.1.1 0(目的IP地址是主机地址,优先级高于上图中的两条规则):
    在这里插入图片描述

    系统将按照规则的优先级关系,重新为各规则分配编号。插入新规则后,新的排序如下:
    在这里插入图片描述

    可以看到,rule deny ip destination 1.1.1.1 0的优先级最高,排列最靠前。

    注意在配置的时候,auto模式不能配置编号,对于的编号是通过系统排序后按照步长自动生成的,默认步长为,也就是从开始排序:
    在这里插入图片描述
    这里又引出了ACL中为什么把最严格的放在前面是最好的,是因为将精确的提前匹配执行指定的操作,防止以后范围大的将其匹配到做出自己不想要的操作。
    又例如直接通过ACL过滤流量的时候,基本ACL匹配的范围大,高级ACL范围小,我们将匹配更精确的ACL放在离源近的地方做精确过滤,如果基本ACL放在源处,可能将不想过滤的条目都过滤了。例如想过滤源为1.1.1.1/24,目的地址为2.2.2.2/24的条目,如果配置基本ACL只能匹配源,让其他目的地的都被过滤了。所以满足条件的情况下基本ACL更应该放在离目的近的地方,这样对源过滤相对来说还是比较精确,当然高级ACL也可以,毕竟高级ACL有基本ACL的所有功能,但是好处是基本ACL更方便配置,没必要大才小用,还浪费更多的CPU资源。

    ACL其他特性:

    在这里插入图片描述
    一、ACL对分片报文的支持

    1. 传统的包过滤并不处理所有IP 报文分片,而是只对第一个(首片)分片报文进行匹配处理,后续分片一律放行。这样,网络攻击者可能构造后续的分片报文进行流量攻击,带来安全隐患。
    2. 在ACL规则中,通过参数fragment来标识该ACL规则对所有分片报文有效,而对非分片报文则忽略此规则;通过参数none-first-fragment来标识该规则仅对非首片分片报文有效,而对非分片报文和首片分片报文则忽略此规则。不包含参数fragment或none-first-fragment的配置规则项对所有报文(包括分片报文)均有效。

    相应配置:在条目后加入fragment参数
    [Huawei-acl-basic-2005]rule 5 permit source any fragment
    [Huawei-acl-basic-2005]rule 5 permit source any none-first-fragment

    二、ACL生效时间段
    可以使ACL规则需要在某个或某些特定时间内生效,而在其他时间段则不生效。

    第一种模式 相对时间段:以星期为参数来定义时间范围。
    格式为:time-range time-name start-time to end-time { days } &<1-7>
    • time-name:时间段名称,以英文字母开头的字符串。
    • start-time to end-time:开始时间和结束时间。格式为[小时:分钟] to [小时:分钟]。
    • days:有多种表达方式:

    1. Mon、Tue、Wed、Thu、Fri、Sat、Sun中的一个或者几个的组合,也可以用数字表达,0表示星期日,1表示星期一,……6表示星期六。
    2. working-day:从星期一到星期五,五天。
    3. daily:包括一周七天。
    4. off-day:包括星期六和星期日,两天。
      第二种模式 绝对时间段:从某年某月某日的某一时间开始,到某年某月某日的某一时间结束。
      格式为:time-range time-name from time1 date1 [ to time2 date2 ]
      • time:格式为 [小时:分钟]。
      • date:格式为[YYYY/MM/DD],表示年/月/日。

    什么情况下可以使用生效时间段作为匹配项?
    例如,每天20:00~22:00为网络流量的高峰期,大量P2P、下载类业务的使用影响了其他数据业务的正常使用,此时通过设置在这个时间段内降低P2P、下载类业务的带宽,可以防止网络拥塞。配置如下:
    time-range time1 20:00 to 22:00 daily

    再举一例,某公司对外开放服务器的访问权限,但开放时间限制为:从2018年1月1日零点开始生效,到2018年12月31日晚上23:59截止。此时通过设置在这个时间段内访问服务器的报文才允许通过,就可以达到基于时间的访问权限控制的效果。配置如下:
    time-range time2 from 00:00 2014/1/1 to 23:59 2014/12/31
    最后,配置完时间段,千万别忘记要将时间段与ACL规则关联起来,这样才是一条基于时间的ACL的完整配置过程。

    注意:使用同一time-name可以配置多条不同的时间段,以达到这样的效果:各周期时间段之间以及各绝对时间段之间分别取并集之后,再取二者的交集作为最终生效的时间范围。并且如果规则引用的时间段未配置,规则不能立即生效,直到用户配置了引用的时间段,并且系统时间在指定时间段范围内,ACL规则才能生效。

    配置如下:
    acl acl-number
    rule [ rule-id ] { deny | permit } other-options time-range time-name

    ACL配置:

    一、执行命令acl { [ number ] acl-number | name acl-name { [ number ] acl-number | basic } },创建XX ACL,并进入XX ACL视图。

    1. 基本ACL编号acl-number的范围是2000~2999。
    2. 高级ACL编号acl-number的范围是3000~3999。
    3. 二层ACL编号acl-number的范围是4000~4999。
    4. 用户自定义ACL编号acl-number的范围是5000~5999。
    5. 基于ARP的ACL编号acl-number的范围是23000~23999。
    6. 基本ACL6编号acl6-number的范围是2000~2999。
    7. 高级ACL6编号acl6-number的范围是3000~3999。

    二、设置步长:在ACL模式下执行命令step step,配置步长。

    三、创建规则:以基本ACL为例子,其他ACL情况类似
    执行命令rule [ rule-id ] { deny | permit } [ fragment-type fragment | source { source-ip-address { source-wildcard | 0 | src-netmask } | any } | time-range time-name | vpn-instance vpn-instance-name | logging ] *,配置基本ACL的规则。

    字段解释:

    1. rule-id:自动生成,初始步长为5,按照倍数往后累加,也可以自定义步长。
    2. 2.deny | permit:指定拒绝或允许符合条件的数据包。
    3. source-address:表示源地址。
    4. source-wildcard:表示指定源地址的通配符,any 表示任意源地址,也可以
      用0.0.0.0 255.255.255.255来表示。
    5. time-range: 用来规定ACL生效的时间段。
    6. vpn-instance:
      用来指定ACL规则匹配报文的VPN实例名称。
    7. fragment:用来对分片的报文进行匹配。如果携带了该参数,被分片的数据包
      将会被匹配到。.
    8. none- frst-fragment:用来对非首片分片报文生效,如果携带参数则说明只用来
      匹配非首片报文。

    ACL应用实验:

    流量过滤器是专门为ACL准备的调用方法,只能调用ACL,并且在接口上配置时可以分根据流量的出方向和入方向进行过滤,但是不能过滤自己产生的流量。
    在这里插入图片描述
    实验拓扑:
    在这里插入图片描述
    目的:
    现在PC1、2、3都能互相ping通,我们需要在R1上分别配置高级ACL和二层ACL让PC2和PC3不能主动访问R2,并且只对PC1开启检测分段报文的功能和时间段限制机制。

    步骤:
    首先在R1上限制PC2和PC3不能和R2通信:
    [R1]dis acl all //ACL的配置
    Total quantity of nonempty ACL number is 2

    Advanced ACL 3000, 1 rule
    Acl’s step is 5
    rule 5 deny icmp source 10.1.1.102 0 destination 172.16.1.2 0 //源地址是PC2的地址

    L2 ACL 4000, 1 rule
    Acl’s step is 5
    rule 5 deny source-mac 5489-980b-4463 //PC3的MAC地址

    然后分别在R1的两个接口上运用,注意流量方向为入方向,。
    interface GigabitEthernet0/0/0
    traffic-filter inbound acl 4000

    interface GigabitEthernet0/0/1
    traffic-filter outbound acl 3000

    查看PC2和PC3是否还能ping通:失败
    在这里插入图片描述
    然后在R2上配置针对于PC1的策略,让其只能在周末早上8-10点访问R2,并且只对分段的报文的所有报文进行检查:
    time-range time 08:00 to 10:00 working-day //设置时间段
    Basic ACL 2000, 1 rule

    Acl’s step is 5 //设置ACL,在对应时间段对只对PC1发出的分段报文检查,,动作为不放行,其他报文忽略,在其他时间段,一律放行所有流量
    rule 5 deny source 10.1.1.100 0 fragment time-range time(Inactive) //inactive说明不在时间段内
    在这里插入图片描述
    设置为ICMP的date字段为6000,然后去pingR2,只要不在规定的时间内分段报文当然还是能够通信的,我们可以看看ICMP分段报文是怎么发送的:在这里插入图片描述

    都是先发了分段的报文,在最后才发送真正的ICMP报文。分段报文有4个,每个1480字节+IP头部20字节为1500字节,总共为4x1480=5920,还有80字节在真正的ICMP报文中带有:
    在这里插入图片描述
    查看ICMP报文的片偏移为:5920,说明没有错误,所以ICMP的data字段为80。
    在这里插入图片描述
    另外需要注意的是,6000代表的是数据字段有6000bytes,并不加上ICMP报头的8字节。

    ACL应用场景:

    在这里插入图片描述

    参考资料:华为hedex文档

    展开全文
  • Redis

    2020-08-21 13:37:11
    1.Redis 是一个基于内存高性能key-value数据库。 ...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,h
  • Java redis精选面试题

    2020-12-27 23:55:13
    1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘
  • 1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘
  • 微服务中可以java编写、Python编写,他们都是靠restful架构风格统一成一个系统,所以微服务本身与具体技术无关、扩展性强。 大型电商平台微服务功能图 为什么要将SpringCloud项目部署到k8s平台? Spring...
  • 2.1.2变量有哪些类型 2.2如何使用变量 2.2.1如何使用整型变量 2.2.2如何使用浮点型变量 2.2.3如何使用字符型变量 2.2.4如何使用布尔型变量 2.2.5基本数据类型之间类型转换 2.2.6基本数据类型和字符串之间...
  • 1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘
  • ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。 mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。...
  • 1.Redis 是一个基于内存高性能key-value数据库。 2.Redis相比memcached有哪些优势: memcached所有值均是简单字符串...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用...
  •  6.2.6 类成员的访问控制  6.2.7 在友元中访问类的隐藏信息  6.3 类如何面向对象  6.3.1 用类机制实现封装  6.3.2 用基类和派生类实现继承  6.3.3 用虚函数实现多态  6.4 实战面向对象:工资?理系统  6.4.1 ...
  • 特别是对于分公司的集团性质的公司来说,在总部和分支机构的网络中,存放于总部的文件需要经常访问,但广域网带宽有限,效率低,所以企业管理员可以把常用的文件存储到NAS中,提供高效率访问。另外配合现有的VPN...
  • 某公司计对通信手段的进步,需要将原有的业务系统扩展到互联网上。...问题:1.3 数据安全中的访问控制包含两种方式,用户标识与验证和存取控制。请简要说明用户标识与验证常用的3种方法和存取控制中的两种...
  • 1.什么是代理 根据原有对象生成一个占位(代理对象),然后由代理对象来代理真实对象,控制对真实对象的访问的操作就叫做代理...4.常用的代理技术有哪些 1)JDK动态代理 2)CGLIB动态代理 5.JDK动态代理 1)代...
  • 随着网络安全的日益提高,为防止部分恶意人员对商城进行点击或其他不法行为,网趣网上购物系统新增IP访问限制功能,添加某IP后即可限制此IP人员的访问,同时系统支持IP段的限制访问功能,可对同一IP段进行访问限制...
  • Redis面试题

    2021-01-12 21:36:14
    1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘
  • redis基础问答

    2020-12-23 11:57:12
    1.Redis 是一个基于内存高性能key-value数据库。...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘
  • Redis常见问题

    2020-10-30 20:58:31
    1.Redis 是一个基于内存高性能key-value数据库...redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销 4.Reids常用5种数据类型 string,list,set,sorted set,hash 6.Reids6种淘汰策略: no
  • 自主访问控制中用户可以随意地将自己拥有的访问控制权限赋给其他用户,之后还可以将所赋权限撤销,这使得管理员难以确定哪些用户对哪些资源访问权限,不利于统一的全局访问控制。而强制访问控制规定每个主体都其...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

常用的访问控制技术有哪些