一张图搞定OAuth2.0

  categories:资料  author:

1、引言

本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式

非常简单的一件事情,网上一堆神乎其神的讲解,让我不得不写一篇文章来终结它们。

一项新的技术,无非就是了解它是什么为什么怎么用。至于为什么,本篇文章不做重点探讨,网上会有各种文章举各种什么丢钥匙、发船票的例子供你去阅读,个人认为还是有些哗众取宠,没有聊到本质。

那我们就重点聊聊OAuth2.0是什么怎么用。但首先在读本文之前,你要先对OAuth2.0有一定的了解,建议先读一下阮一峰的oauth2.0文章,直接看“授权码模式”即可,带着疑问再来读本文效果更好。

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

2、OAuth2.0是什么

OAuth2.0是什么——豆瓣和QQ的故事

OAuth简单说就是一种授权的协议,只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。

举个例子,你想登录豆瓣去看看电影评论,但你丫的从来没注册过豆瓣账号,又不想新注册一个再使用豆瓣,怎么办呢?不用担心,豆瓣已经为你这种懒人做了准备,用你的qq号可以授权给豆瓣进行登录,请看。

第一步:在豆瓣官网点击用qq登录

第二步:跳转到qq登录页面输入用户名密码,然后点授权并登录

第三步:跳回到豆瓣页面,成功登录

这几秒钟之内发生的事情,在无知的用户视角看来,就是在豆瓣官网上输了个qq号和密码就登录成功了。在一些细心的用户视角看来,页面经历了从豆瓣到qq,再从qq到豆瓣的两次页面跳转。但作为一群专业的程序员,我们还应该从上帝视角来看这个过程。

OAuth2.0是什么——上帝视角

简单来说,上述例子中的豆瓣就是客户端,QQ就是认证服务器阅读全文

面向过程和面向对象的计算机编程

  categories:儿童计算机  author:

本文是 从锦囊妙计联想到的16集, 从本集开始 要开始些实用的东西, 然后在分享一下 使用的视频教程, 参照这些教程可以进行简单的计算机的入门等操作了。

前面的加上本集, 大概一共15集 , 主要是说明了一下计算机基本上都工作原理, 由于本人水平有限, 也未必都是正确的, 仅仅是给初学者提供一个帮助。前面通过各种例子试图说明 计算机就是执行程序的一个 机器, 他的执行必须依赖指令, 而指令其实就相当于锦囊一样。

 下面的一段文字内容很重要, 要仔细瞧

     计算机程序复杂到一定程度后, 就会有大量的锦囊(指令的存在), 而锦囊多到一定程度后, 就很难管理了,这个时候, 我们就需要根据各个锦囊的相关程度和特点以及一些执行顺序把这些锦囊要分类打包到一个大的锦囊中去。然后别人才好使用。

现在的问题是当问题复杂到一定程度后, 这个负责打包的人负责整理的人能否完整的考虑清楚 每个分类, 每个打包的情况吗? 这个是非常重要的问题。

先放下这个问题, 先仔细看看 常见的解决问题的过程, 看看是否能解决上述的问题。

一。基于过程,基于函数,面向过程

上面的几个说法基本上没什么特别大的区别, 基本是一样就像谁能说出老鼠同耗子的区别, 反正我不知道有什么区别。

1.

阅读全文

让我们了解程序运行情况与参与程序的运行

  categories:儿童计算机  author:

本文是 从锦囊妙计联想到的15集(中间跳过了一个编号, 那个不吉利)

这个文章重点研究一下window和android里面的activity他们的作用

本文是上一集的延续,继续说一下如何与程序运行的, 了解程序运行的必要性。

一。人机交互的必要性

在本系列的最开始, 说过 计算机是个 笨东西, 你给他安排了什么工作他就做什么工作, 你说错了, 他也会重复错的, 你牵来一只羊, 对计算机说这个是马, 计算机就认为这个是马, 他没有智能不能自己思考(有一类特殊程序例外, 后面我们会慢慢谈到这个的), 因此你说了什么他就认为什么。这个就是计算机, 就是一个忠实的程序员的信徒。

那么随着程序员编写程序的功能的变多, 功能多了, 程序复杂了, 程序可能错的情况就多了, 因此需要在程序运行过程中, 让外面的人了解程序运行的状况, 看程序是否还在正常运行。

另外 有时候程序运行时还需要用户提供一定的信息和数据, 例如到一些政府部门去办理业务, 他们操作的也是计算机, 但是需要您自己提供一些数据等, 这样程序才能继续进行操作。

再有有些程序需要用户的积极参与才能运行, 例如电脑游戏,需要用操作电脑终端,进而操作计算机里面的角色, 参与计算机程序的运行。这样用户相当于进入了一个新的思想世界,参与其中。

那么如何 了解程序内部,或者操作程序内部, 计算机如何将内部信息展示给外部世界?… 阅读全文

基于 GlusterFS 实现 Docker 集群的分布式存储

  categories:资料  author:

以 Docker 为代表的容器技术在云计算领域正扮演着越来越重要的角色,甚至一度被认为是虚拟化技术的替代品。企业级的容器应用常常需要将重要的数据持久化,方便在不同容器间共享。为了能够持久化数据以及共享容器间的数据,Docker 提出了 Volume 的概念。单机环境的数据卷难以满足 Docker 集群化的要求,因此需要引入分布式文件系统。目前开源的分布式文件系统有许多,例如 GFS,Ceph,HDFS,FastDFS,GlusterFS 等。GlusterFS 因其部署简单、扩展性强、高可用等特点,在分布式存储领域被广泛使用。本文主要介绍了如何利用 GlusterFS 为 Docker 集群提供可靠的分布式文件存储。

GlusterFS 分布式文件系统简介

GlusterFS 概述

GlusterFS (Gluster File System) 是一个开源的分布式文件系统,主要由 Z RESEARCH 公司负责开发。GlusterFS 是 Scale-Out 存储解决方案 Gluster 的核心,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS 借助 TCP/IP 或 InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS 基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。

GlusterFS … 阅读全文

RocketMQ初探一:NameServer的作用

  categories:资料  author:

第一次真正接触Java消息服务是在2013年底,当时是给中国移动做统一支付平台,当时用的就是著名的Apache ActiveMQ,当时觉得很有趣,一个服务队列竟然可以玩出这么多花样来。当时为了尽快的入门,还把《Java Message Service》给看了一遍,这对于初学者的我收获颇多。我说知道的完全实现JMS规范的MOM有ActiveMQ/Apollo和HornetQ,都是采用Java实现。JMS中说明了Java消息服务的两种消息传送模型,即P2P(点对点)和Pub/Sub(发布订阅),在约定了一些消息服务特性的同时,并提供了一套接口API,是否实现了该API,标志着MOM是否支持JMS规范,JMS规范中定义了消息服务诸多特性,这些特性和他所面对的企业级服务场景相关,当然,这也严重限制了消息服务的吞吐量,完全实现JMS规范的MOM,性能总不会太高,而且JMS规范中没有涉及消息服务的分布式特性,导致大多数实现JMS规范的MOM分布式部署功能比较弱,只适合集群部署。

 

说到高性能消息中间件,第一个想到的肯定是LinkedIn开源的Kafka,虽然最初Kafka是为日志传输而生,但也非常适合互联网公司消息服务的应用场景,他们不要求数据实时的强一致性(事务),更多是希望达到数据的最终一致性。RocketMQ是MetaQ的3.0版本,而MetaQ最初的设计又参考了Kafka。最初的MetaQ 1.x版本由阿里的原作者庄晓丹开发,后面的MetaQ 2.x版本才进行了开源,这里需要注意一点的事,MetaQ 1.x和MetaQ 2.x是依赖ZooKeeper的,但RocketMQ(即MetaQ 3.x)却去掉了ZooKeeper依赖,转而采用自己的NameServer。

 

ZooKeeper是著名的分布式协作框架,提供了Master选举、分布式锁、数据的发布和订阅等诸多功能,为什么RocketMQ没有选择ZooKeeper,而是自己开发了NameServer,我们来具体看看NameServer在RocketMQ集群中的作用就明了了。

 

RocketMQ的Broker有三种集群部署方式:1.单台Master部署;2.多台Master部署;3.多Master多Slave部署;采用第3种部署方式时,Master和Slave可以采用同步复制和异步复制两种方式。下图是第3种部署方式的简单图:

 


 

图虽然是网上找的,但也足以说明问题,当采用多Master方式时,Master与Master之间是不需要知道彼此的,这样的设计直接降低了Broker实现的复查性,你可以试想,如果Master与Master之间需要知道彼此的存在,这会需要在Master之中维护一个网络的Master列表,而且必然设计到Master发现和活跃Master数量变更等诸多状态更新问题,所以最简单也最可靠的做法就是Master只做好自己的事情(比如和Slave进行数据同步)即可,这样,在分布式环境中,某台Master宕机或上线,不会对其他Master造成任何影响。

 

那么怎么才能知道网络中有多少台Master和Slave呢?你会很自然想到用ZooKeeper,每个活跃的Master或Slave都去约定的ZooKeeper节点下注册一个状态节点,但RocketMQ没有使用ZooKeeper,所以这件事就交给了NameServer来做了(看上图)。

 

结论一:NameServer用来保存活跃的broker列表,包括Master和Slave。

当然,这个结论百度一查就知道,我们移步到rocketmq-namesrv模块中最重要的一个类:RouteInfoManager,它的主要属性如下:

 

private final ReadWriteLock lock = new ReentrantReadWriteLock();

private final HashMap<String/* topic */, List<QueueData>> topicQueueTable;

private final … 阅读全文

如何做一个对账系统

  categories:资料  author:

在互联网行业中只要涉及到支付,必然就会有对账的需求,几乎所有互联网公司的业务中多多少少的都会涉及到支付,大一点的公司甚至都标配有了自己的第三方支付公司,因此对账具有普遍性。对账系统是支付体系中最重要的一环,也是保证交易、资金安全的最后一道防线。在大多数的互联网公司中,一般都会有独立的对账系统来处理,比如:电商平台、互联网金融、第三方支付公司等。对账是支付系统中的一环,因此在对账前我们先了解一下相关的业务知识

业务知识

什么是对账

传统的对账就是核对账目,是指在会计核算中,为保证账簿记录正确可靠,对账簿中的有关数据进行检查和核对的工作。在银行或者第三方支付中,对账其实是对一定周期内的交易进行双方确认的过程,一般都是在第二天银行或者第三方支付公司对前一日交易进行清分,生成对账单供平台商户下载,并将应结算款结算给平台商户。在往下一层,在互联网金融行业或者电商行业中,对账其实就是确认在固定周期内和支付提供方(银行和第反方支付)的交易、资金的正确性,保证双方的交易、资金一致正确。

广义的对账,所有跨应用的数据交互,理论上都应该进行对账。所以对账也可以分为信息流对账,资金流对账。信息流对账也一般用在自己内部系统的对账,比如支付系统的支付数据和业务系统的业务数据进行对账,保证资金交易和业务交易的一致性。资金流对账也就是支付系统和银行或者第三方支付系统之间的资金交易对账。

对账方式

  • 单向对账:一般拿第三方支付机构或银行流水,与自己系统进行对账,防止出现掉单问题;
  • 双向对账:两个应用间的流水进行双向核对,如订单与财务系统,既要保证财务系统支付成功的记录,订单系统也是成功的;也要确保订单系统记录成功的记录,财务系统也成功。

我们一般采用双向对账的方式进行对账

对账相关的问题

不同系统日切点不一致问题:滚动对账
差错处理:补账,补偿(退款)

相关概念

轧帐和平帐

每一笔交易,都要做到各参与者的记录能够吻合,没有偏差。对账系统的工作,是发现有差异的记录,即轧帐;然后通过人工或者自动的方式,解决这些差异,即平帐。

长款和漏单

在以平台交易为基准的情况下和银行对账,发现周期内的交易,平台有此订单而第三方支付中没有订单,成为平台长款。平台长款一般是由于用户在支付的时候跨天的情况,比如用户在23:58分创建了订单,在第二天的凌晨00:03分进行了支付。在以银行交易为基准的情况下对账,银行有此订单而平台无此订单,即为平台漏单。平台漏单很少见,一般直接转人工处理。

账户体系

在一般的支付体系中会分为登录账户和支付账户,支付账户指用户在支付系统中用于交易的资金所有者权益的凭证;登录账号指用户在系统中登录的凭证和个人信息。一个用户可以有多个登录账户,一个登录账户可以有多个支付账户,比如零钱账户、储值卡账户等。一般来说,支付账户不会在多个登录账户之间共用。对账的交易一般都是支付账户参与交易。

交易与账户

账户设置,一般是从交易开始的。 交易的实现必须有账户的支持,账户是交易的基本构成元素。 从支付系统的角度,交易中涉及到的资金流是资金从一个账户流向另一个账户。 发起交易的一方,被称之为交易主体,他可以是一个人,也可以是一个机构。

清算和结算

清算主要是指不同银行间的货币收付,可以认为是结算进行之前,发起行和接收行对支付指令的发送、接收、核对确认,其结果是全面交换结算工具和支付信息,并建立最终结算头寸。

结算是指将清算过程产生的待结算头寸分别在发起行、接收行进行相应的会计处理,完成资金转移,并通知收付双方的过程。当前,大多数银行结算业务的完成主要通过两类账户:一是银行间互相开立的代理账户,二是开立在央行、独立金融机构如银联、或者第三方支付机构的账户。

清算:计算各方应收应付钱款的时间与金额。结算:根据清算的结果在指定的时间对各方进行实际的资金转移操作

资金池

用户备付资金(如充值)统一放在企业的银行账户中,企业可以随意支配这些资金,即为资金池。与之对应的是第三方托管,用户备付资金是放在企业在第三方支付机构为用户开设的虚拟账户中,企业无法随意取出这些资金。现在互联网金融全面要求接入银行存管,就是银行会为每个用户创建一个资金账户来保护用户的资金,互联金融公司不能随意划拨这些资金账户中的金额。

对账系统

对账设计

reconciliation_design

对账系统的设计阶段,将对账系统分为四个模块,每个模块的负责自己的职能。

  • 文件获取模块:下载或者读取各渠道对账文件
  • 文件解析模块:创建不同的解析模板,根据渠道和文件类型获取对应的解析模板进行解析
  • 对账处理模块:对账的业务逻辑处理
  • 差错处理模块:处理差错池中的订单

一般会设计一个定时任务,每天固定的时间点触发,定时驱动调度类分别调用四个模块来处理对账。也有的银行会主动的推送对账单,再通过http回调来触发对账流程。

对账算法

一、流程:… 阅读全文

树莓派 Raspberry Pi 更换国内源

  categories:资料  author:

树莓派的服务器实在太慢了!会导致你安装一个几M的东西都要等大半天!肿么办!
好在树莓派官方有提供一个镜像列表:http://www.raspbian.org/RaspbianMirrors”>树莓派的服务器实在太慢了!会导致你安装一个几M的东西都要等大半天!肿么办! 好在树莓派官方有提供一个镜像列表:http://www.raspbian.org/RaspbianMirro…

树莓派的服务器实在太慢了!会导致你安装一个几M的东西都要等大半天!肿么办!

好在树莓派官方有提供一个镜像列表:http://www.raspbian.org/RaspbianMirrors

面找到了几个国内的镜像一些软件无法更新,经过几番尝试,建议国内的阿里云更新源。

镜像主页:http://mirrors.aliyun.com/

阿里云镜像由阿里巴巴技术保障部基础系统组提供支持。

覆盖了Debian、Ubuntu、 Fedora、Arch Linux、 CentOS、openSUSE、Scientific Linux、Gentoo、Raspbian 等多个发行版的软件源镜像。

搭建此开源镜像的目的在于宣传自由软件的价值,提高自由软件社区文化氛围, 推广自由软件在国内应用。

同步频率为每天一次,每天凌晨2:00-4:00为镜像的同步时间

根据教程,咱们来编辑 /etc/apt/sources.list 文件。这里推荐用 nano 命令编辑。命令如下:

pi@raspberrypi:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  #备份为 sources.list.bak
pi@raspberrypi:~$ sudo nano /etc/apt/sources.list     #编辑sources.list  文件

进入编辑界面,删除原有的内容或者用#注释掉原来的源,添加下方的源内容。

源如下:

deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy 
阅读全文

运行时同用户交互动态获得指示

  categories:儿童计算机  author:

本文是从锦囊妙计想到的13集,主要说一下如何在运行(工作的)时候,现场同用户获取工作的进一步指示,然后提高程序的工作满意度。

一。总结一下前面程序的一些特点和缺点

前面的烙饼程序是 关羽写的一些列锦囊, 然后张飞去烙饼,其实就是去执行或者运行程序。

关羽写的一系列锦囊叫做程序,这个时候关羽仅仅是预测了未来这个程序执行时的一些可以预见的事情, 对于一些无法预测的事情还不知道如何处理, 例如突然天上巨大闪电造成厨房大停电,就没办法处理了。

因此程序是事先写好的, 考虑到将来运行时的一些情况的一个一系列的指令(锦囊)的东西。这些东西可以打包到一个超级大的麻袋中, 麻袋里面可以放非常多的小麻袋, 小麻袋里面在放小麻袋。。。 最后放锦囊等等

张飞拿到外面的这个最大的麻袋, 然后打开,然后依照这里的锦囊进行工作时, 直到工作完成, 是需要一段时间的,整个这个过程叫程序的执行或者运行。运行中的程序 可以叫做进程。

在一个执行中的程序可能存在几个执行路线, 具体的看张飞是否三头六臂了。

若是张飞3头6臂 就可能有三张饼在同时烙,因此可能有3个行进路线,也就是三个线程。  当然也可能仅仅有一个,这个情况比较复杂, 以后深入计算机就明白了。现在了解一下就好。

另外, 关羽写的程序,除了可以被张飞执行,其实可以被很多人执行, 只要这些人会认字, 有一定厨房的本事就可以了。

因此一个程序其实可以 被执行多次, 别多人执行等等。

但是, 一个写好的程序其实也有一个问题,就是这个程序是按照写程序的人的想法写的, 但是写程序的人没办法预料到程序执行时一些具体的情况。例如

张飞烙饼是参照关羽写的锦囊进行的, 那么关羽一定写了自己喜欢吃的饼的做法, 例如关羽喜欢吃葱花饼, 但是改天赵云来了,赵云爱吃馅饼,等张飞端着一盆馅饼上来, 赵云一看,好家伙都是葱花饼, 没一个馅饼。。。… 阅读全文

锦囊打包与函数和过程

  categories:儿童计算机  author:

这里是“从锦囊妙计想到的12”, 本文是通过给锦囊打包, 从而引出函数(或者过程,子程序)的概念,从而对指令部分进行细化分析。

一. 给众多小锦囊打个包

还是说个故事,依然还是烙饼的故事(谁让这个东西好吃呢)。

关羽写锦囊, 张飞烙饼, 已经持续很多天了, 就像柯南永远也长不大那样,故事就这么一个场景, 反正, 人家柯南每次都不一样, 我们每次内容说明的知识也是不一样的。

关羽已经吃惯了张飞烙的大饼,每天都要来蹭一顿, 每天关羽都要写呀写呀一些锦囊,然后老张去烙饼。

最近老有人来蹭饭因此每次烙的饼数不一样了, 这样关羽每次都得重新写一下, 关羽很郁闷。 后来关于发现数量的变化可以通过增加一个锦囊, 在锦囊里面放一个装豆子的袋子就解决了。

不过每次锦囊数量很多,拿起来很不方便, 然后还得整理一番, 给这些锦囊重新编号。  关羽还是个聪明的人, 他用了一个非常大的袋子把这些锦囊都收集到一起,然后每次把这个大袋子给张飞拿起, 然后张飞可以打开袋子从里面拿出锦囊(也就是指令去执行了)去工作。如下图

通过一个大好的 麻袋把众多带有指令的锦囊和带有数据的锦囊打包到一起, 然后做为一个整体进行处理,管理,使用等就方便多了。

二. 形实结合的参数

上面通过一个麻袋把全部锦囊都打包的办法可以解决了很多的问题了, 但是还有一个问题就是, 每次当有需要修改麻袋里面内容的时候,需要将麻袋整体打开,然后修改, 最后在整体都打包在一起。

这样尽管也可以, 但是长时间工作后发现,有的时候由于士兵粗心,在重新装麻袋时会偶尔忘记个别的锦囊,这样就有了麻烦。如何解决这个问题?

出现这个问题是, 每次还是有一些东西要修改, 由于这些要修改的东西同其他东西放到一起了, … 阅读全文

给锦囊分分类

  categories:儿童计算机  author:

本文是:从锦囊妙计想到的11, 内容是给锦囊分分类。

前面重点说明了, 锦囊的执行路线, 就像可以把这些锦囊串接到一起形成一串, 类似一条线, 因此就有了线程。 同时随着工作量的增加, 一个人已经忙不过来了, 因此需要多个人同时工作, 那么每个人都有了一个执行路线, 因此就了多线程。

多线程中自然存在一些原来一个线程没有的问题,特别是一些非常容易出现错误的问题, 例如

1. 多个线程(两个人)同时拿起一个苹果去吃, 这个如何是好? 这个就是竞争关系, 有多时候, 两个人都看看苹果是没问题的, 但是若是有一个线程(人)去吃, 有人去看 那苹果可能已经比咬了一口, 而看到的是 被咬了的苹果

2. 多个人在不同时间向1号储物柜放东西, 那么最后储物柜里面的东西是那个人的, 是否有意都成问题了。 例如甲在1号储物柜放了兔子, 乙放了一条狗, 最后结果如何?

上述问题都是并行计算中常见一些问题, 并行计算里面还有很多问题, 暂时先不说了, 否则跑题太远了, 今天聊聊 锦囊的分类问题。

一. 可以灵活复用的一堆锦囊

阅读全文


快乐成长 每天进步一点点      京ICP备18032580号-1