认识博弈论
何为博弈在中国古文中,”博”的本意是六根筷子和十二枚旗子进行的赌输赢的一种游戏。谓之”六箸十二棋”,作为动词包含有”下棋”之意。”弈”指的是围棋。因此,从中文字面义来看,”博弈”就是指”下围棋”,再后来引申出"竞技"的概念。在英文中,”博弈”对应的词是”game”,翻译为”游戏”,既有”消遣娱乐”,又有”按照规则进行的体力、智力竞赛”之意 (博弈论在英文中为:game theory)。
由此可知,中外基本一致的认识是:博弈是一种双方(多方)的对抗(竞技),对抗总是在一定的规则下进行,参与者必须考虑应对的策略,尽可能使自己获胜。
博弈论前世今生博弈论的思想在国内外都有非常悠久的历史,无论是人们熟知的”田忌赛马”,还是《孙子兵法》、《圣经》、希腊神话等诸多传说,都蕴含着博弈的智慧思想。但是,博弈论不同于博弈,博弈论是对博弈的理论研究,通过对博弈的理论分析从而提升人们的博弈能力。
1944年,数学家约翰.冯诺依曼与经济学家奥斯卡.摩根斯坦合著的《博弈论与经济行为》标志着博弈论真正的作为一门学科理论的诞生,被称为”20世纪前半期最伟大的科学成就之一”。
真正把博弈论发扬光大 ...
支付宝购买美区App Store礼品卡
对于国内iOS用户来说,如果你接触过美区Apple ID并且需要购买一些软件的话,会进行绑定支付方式等操作,整个过程稍显繁琐(见文章通过礼品卡购买美区AppleID付费App
)。对于日常使用支付宝、微信的国人来说,有没有一些简单的操作方式呢?答案是:有。本文以支付宝为例,展示整个购买、兑换过程。
支付宝购买App store礼品卡流程
打开支付宝进入到首页,左上角位置变更为美国任意城市。然后,点击页面下方导航栏 出境
下拉页面,找到 折扣礼卡,点进去
下拉到最下面,找到 更多大牌折扣礼卡 或者 App store 图标,点进去
下拉找到 App Store & iTunes,点进去
输入金额(最低2美元起购),点击 立即购买 付款即可
初次使用需要注册用户的,按要求操作即可
弹出支付宝收银台,进行支付
App Store礼品卡兑换流程
查看订单,找到刚才支付成功的订单,点进去
复制礼品卡号码
打开苹果的 App Store,点击右上角头像,找到 Redeem Gift Card or Code,点进去
注意:此时 App Store ...
Redis Cluster集群hash tag原理分析
工欲善其事必先利其器,在正式开始研究redis cluster hash tag之前,我们先以最小的成本搭建一套cluster集群。
docker-compose搭建redis cluster这里使用dockerhub的bitnami/redis-cluster进行搭建,过程相比网上其他教程而言非常简单,2个shell命令搞定。
12curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/redis-cluster/docker-compose.yml > docker-compose.ymldocker-compose up -d
bitnami redis-cluster 对应的 docker-compose.yml (笔者做了细微的修改)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 ...
Redis事件驱动(aeEventLoop)原理分析
关于Redis事件驱动众所周知,Redis是高性能的、基于内存的、k-v数据库。其强大的功能背后,存在着2种不同类型的事件驱动,包括:
文件事件(File event)
时间事件(Time event)
文件事件是对相关的 fd 相关操作的封装,时间事件则是对定时任务相关操作的封装。Redis server通过文件事件来进行外部请求的处理与操作,通过时间事件来对系统内部产生的定时任务进行处理。(本文重点讲解文件事件相关的操作流程以及原理)
文中探讨的原理及源码基于Redis官方 v7.0 版本
Redis事件驱动的相关源码在Redis源码中,涉及事件驱动相关的源码文件主要有以下几个(以ae作为文件名称前缀):
1234567src├── ae.c ├── ae.h├── ae_epoll.c├── ae_evport.c├── ae_kqueue.c└── ae_select.c
ae.c文件事件驱动/时间事件驱动的核心处理逻辑
ae.h文件事件驱动/时间事件驱动结构体、方法签名的定义
ae_epoll.clinux os 文件事件驱动涉及的i ...
关于Redis配置信息初始化
关于Redis配置信息Redis Server服务启动过程中,一般需要指定一个配置文件,官方默认配置文件为redis.conf,该文件用于指示Redis运行时状态、处理数据策略等方面。
使用配置文件/path/to/redis.conf来启动Redis Server服务,执行命令如下所示:
1./redis-server /path/to/redis.conf
如果在服务启动时,未指定配置文件,则Redis会使用默认的配置项。
Redis Server有一个全局变量static_configs,其存储着157个(v7.0版本)服务默认使用的通用配置项(默认配置可被自定义配置覆盖),如果包含一些其他特殊的配置,整个配置项可能会更多。
默认配置项信息,如下所示:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 ...
redisServer、redisDB与数据字典dict
关于Redis众所周知Redis是流行的、开源的,使用C语言开发的高性能,基于内存的key/value数据库。它具有高效、精心设计的底层数据结构,同时支持多种数据类型(string、list、set、zset、hash、bitmap、geo、hyperloglog等),让其能够拥有100K+/s的读写性能。正是由于这些优势让它在众多数据库中脱颖而出,支撑着众多互联网公司的海量业务。那么你有没有想过,它的底层是如何运作的?本文从RedisServer的底层结构入手,并通过追溯Set指令操作过程与key的过期时间窥探一下运行原理。
本文探讨的原理及源码均基于Redis官方 v7.0 版本
redisServer、redisDB与数据字典dictRedis服务是常见的c/s架构设计,即:Redis client客户端通过与Redis Server服务端建立连接后对存储在Redis Server端的数据进行操作。Redis Server作为一个单独的进程运行在计算机上,其对数据进行操作的工作线程为单线程,减少了锁开销以及上下文的切换。在Redis Server ...
Redis+DB实现基于号段的发号器原理
什么是发号器在互联网场景中,很多业务要求生成唯一的ID号,以用于区分某些资源。常见例子:电商系统中的订单ID号、聊天群组中的消息ID号、上传文件到存储系统中之后生成的文件ID号、用户注册系统中的用户ID号、商户系统中的商户ID号、开放平台中的开发者账号ID、餐饮店的排队进餐号、影剧院票据单号、医院/银行排队号等等,这些基本都是基于先来后到的规则生成,以期达到唯一性或稍显公平的享受某些资源。你是否想过使用技术应该如何实现呢? 下面引出本文主角:发号器(ticket dispenser),也可称之为ID生成器。
生成的ID号可以是字符串也可以是整数,本文仅探讨生成整数id的发号器实现原理
在互联网行业中,为了保证服务的稳定性、可用性、并发性等指标,服务一般是采用集群多节点部署,如何保证在这些不同的节点生成符合业务要求的ID,又引出另一个概念:分布式ID生成器(实现方案有多种)。关于分布式ID的常见实现方式参考笔者文章:分布式ID的5种生成方式以及Go源码中的一种应用,文章中列举了常见的5种实现方式以及原理。本文,则重点讲解使用Redis+DB基于号段的发号器实现原理。
实现发 ...
IoT设备影子功能介绍与实现
IoT平台架构在物联网领域,应用往往会通过调用集成并实现了MQTT协议的broker的平台与设备进行数据通信,已达到端、云互动与数据流转。常见的IoT架构图如下所示:
在IoT平台中为了达到控制设备实现的功能比较多,但是大致分为3类:
指令控制 (云端控制设备的动作与操作)
属性控制 (云端更新or获取设备拥有的属性)
事件控制 (设备触发某些事件上报给云端)
下面我们来聊聊属性控制中常用的功能-设备影子的实现原理,并通过一些细节来研究其交互过程。
设备影子作用设备影子数据模型是一个json格式数据,主要用于:存储设备当前上报的属性值和IoT平台期望下发给设备的属性值,且设备影子功能只存储最近一次的上报值和属性值。用户可通过应用或直接操作IoT平台API来查询或修改设备影子,以达到获取设备最新属性或将期望属性下发给设备的操作。
引用自:https://support.huaweicloud.com/intl/zh-cn/productdesc-IoT/iot_04_0006.html (下文中应用程序简称应用)
查询设备属性状态:应用直接向设备查询状态时,由于设备可能 ...
通过礼品卡购买美区AppleID付费App
前提说明首先,能够打开这篇文章,笔者默认你知道文章标题的含义。其次,要有一个美区AppleID。
那么,接下来一起看看怎么通过礼品卡购买Apple付费APP吧。
礼品卡购买步骤
注意: 演示操作中使用的邮箱 ivansli100#hotmail.com 为笔者的邮箱,一定要改成你们自己的。
[1] 登录苹果官网礼品卡页面,选择礼品卡发货方式https://www.apple.com/shop/buy-giftcard/giftcard
国内用户,选择邮箱即可
[2] 选择礼品卡卡面样式以及礼品卡金额(最低是10美元)
[3] 填写礼品卡收件人和发件人信息,包括名字和邮箱
发件人信息就可以随便,关键是收件人的邮箱,一定要能接收到苹果给你发送的邮件(最好是AppleID邮箱)。点击 Add to Bag 进入到 Check Out 页面。
[4] 检查信息没问题就 Check Out
[5] 选择登录账号购买 or 游客身份购买,都行
笔者这里选择方式2,游客身份购买。
[6] 付款方式需要一张外币(Vias、MasterCard)信用卡,国内很多银行都可以申请。
[7 ...
分布式ID的5种生成方式以及Go源码中的一种应用
关于分布式ID从目前互联网的系统架构来看,大部分公司为了避免服务节点出现单点故障、保持高可用、高性能等特性,在部署服务时都会部署多个节点,每个节点承担整个服务的一部分请求。对于同一服务多个节点中的每个节点来说,提供的功能相同。节点在处理数据的过程中会根据不同的业务场景,操作相同或不同的数据源。
对于操作相同的数据源,则会形成数据竞争(大部分情况下需要加锁、串行执行)。对于操作不同的数据源,则可以并行/并发处理(无需加锁)。
对于某些场景下的数据资源,需要有全局唯一的数据资源标识。例如:电商系统中的订单ID号、聊天群组中的消息ID号、上传文件到存储系统中之后生成的文件ID号、用户注册系统中的用户ID号、商户系统中的商户ID号、开放平台中的开发者账号ID等等场景。
这些ID号在分布式系统架构中,可以统称为分布式ID。
常见的5种分布式ID生成方式按照是否需要协调(co-ordination)节点,生成分布式ID的方法可以分为2大类:
不需要联网,单服务节点可以在本地生成
需要联网,依赖协调节点生成
这2大类中又可以细分出来多种具体的实现方式,汇总如下图所示:
图片来自:bl ...