精华内容
下载资源
问答
  • 支付及场景介绍

    万次阅读 2018-03-23 16:18:56
    ...   手机支付涵盖多种支付方式,主要包括公众号支付、APP支付、扫码支付、刷卡支付等,...刷卡支付 : 是指用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付,适用于线下面对面收银的场景, ...

    https://open.swiftpass.cn/openapi/

    https://pay.weixin.qq.com/wiki/doc/api/index.html

     

    手机支付涵盖多种支付方式,主要包括公众号支付、APP支付、扫码支付、刷卡支付等,以微信支付为例。

    刷卡支付 : 是指用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付,适用于线下面对面收银的场景,

    如超市、便利店等。(被扫,线下)

    扫码支付 : 是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”来完成支付,

    适用于PC网站支付、实体店单品等场景。(主扫,线上)

    公众号支付 : 是指用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付

    模块来完成支付,适用于在公众号、朋友圈、聊天窗口等微信内完成支付的场景。

    WAP支付 : 是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求!简单来说,就是通过PC、手机网页来实现下单支付。(俗称H5支付)

    APP支付 : 是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付。适用于在移动端APP中集成微信支付功能的场景。

    网关支付 : 是指用户需要开通网上银行后在线完成支付,主要对象是国内主要银行借记卡和信用卡,是银行系统为企业或个人提供的安全、快捷、稳定的支付服务

    快捷支付 : 快捷支付指用户购买商品时,不需开通网银,只需提供银行卡卡号、户名、手机号码等信息,银行验证

    手机号码正确性后,第三方支付发送手机动态口令到用户手机号上,用户输入正确的手机动态口令,

    即可完成支付。

    【统一】刷卡支付

    刷卡支付是用户展示微信钱包,支付宝内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式。主要应用线下面对面收银的场景。

    场景介绍(以微信为例)

    步骤1:用户选择刷卡支付付款并打开微信,进入“我”->“钱包”->“收付款”条码界面;

    步骤2:收银员在商户系统操作生成支付订单,用户确认支付金额;

    步骤3:商户收银员用扫码设备扫描用户的条码/二维码,商户收银系统提交支付;

    步骤4:微信支付后台系统收到支付请求,根据验证密码规则判断是否验证用户的支付密码,不需要验证密码的交易直接发起

                 扣款,需要验证密码的交易会弹出密码输入框。支付成功后微信端会弹出成功页面,支付失败会弹出错误提示。

    (注:用户刷卡条形码规则:18位纯数字,以10、11、12、13、14、15开头)

    扫码支付(微信/支付宝/QQ/京东/银联/百度... ...)

    扫码支付是商户系统按微信/支付宝/QQ/京东/银联/百度... ...支付协议生成支付二维码,用户再用微信/支付宝/QQ/京东/银联/百度... ...“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

    场景介绍(以微信为例)

    用户扫描商户展示在各种场景的二维码进行支付。

    步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码(如图6.1),展示在各种场景,用于用户扫描购买。

    步骤2:用户使用微信“扫一扫”(如图6.2)扫描二维码后,获取商品支付信息,引导用户完成支付。

     

    步骤(3):用户确认支付,输入支付密码(如图6.4)。

    步骤(4):支付完成后会提示用户支付成功(如图6.5),商户后台得到支付成功的通知,然后进行发货处理。

    公众号支付(微信/支付宝服务窗/QQ... ...)

    公众号支付是用户在微信/支付宝/QQ... ...打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:

    1. ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
    2. ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
    3. ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

     

    场景介绍(以微信为例)

    商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程。

    步骤(1):如图7.1,商户下发图文消息或者通过自定义菜单吸引用户点击进入商户网页。

    步骤(2):如图7.2,进入商户网页,用户选择购买,完成选购流程。

     

    步骤(3):如图7.3,调起微信支付控件,用户开始输入支付密码。

    步骤(4):如图7.4,密码验证通过,支付成功。商户后台得到支付成功的通知。

     

    步骤(5):如图7.5,返回商户页面,显示购买成功。该页面由商户自定义。

    步骤(6):如图7.6,微信支付公众号下发支付凭证。

    步骤(7):商户公众号下发消息,提示发货成功。该步骤可选。

     

    注意:商户也可以把商品网页的链接生成二维码,用户扫一扫打开后即可完成购买支付。

    交互细节:

    以下是支付场景的交互细节,请认真阅读,设计商户页面的逻辑:

    (1)用户打开商户网页选购商品,发起支付,在网页通过JavaScript调用getBrandWCPayRequest接口,发起微信支付请求,用户进入支付流程。

    (2)用户成功支付点击完成按钮后,商户的前端会收到JavaScript的返回值。商户可直接跳转到支付成功的静态页面进行展示。

    (3)商户后台收到来自微信开放平台的支付成功回调通知,标志该笔订单支付成功。

    注:(2)和(3)的触发不保证遵循严格的时序。JS API返回值作为触发商户网页跳转的标志,但商户后台应该只在收到微信后台的支付成功回调通知后,才做真正的支付成功的处理。

    WAP支付即H5支付(微信/支付宝/QQ/)

    wap支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。

     

    场景介绍(以微信为例)

    用户在H5页面中或者APP中唤起手机微信支付模块来完成支付功能

    APP支付

    APP支付又称移动端支付,是商户通过在移动端应用APP中集成开放SDK调起支付模块完成支付的模式。

    场景介绍(以微信为例)

    适用于商户在移动端APP中集成微信支付功能。

    商户APP调用微信提供的SDK调用微信支付模块,商户APP会跳转到微信中完成支付,支付完后跳回到商户APP内,最后展示支付结果。

    目前微信支付支持手机系统有:IOS(苹果)、Android(安卓)和WP(Windows Phone)。

    交互细节如下:

    步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例,见图8.1。

    步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面,见图8.2。

    步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付见图8.3。

     

    第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。见图8.4。

    第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。见图8.5。

    展开全文
  • 高并发场景基本介绍

    千次阅读 2018-11-25 00:11:58
    高并发场景下的作弊与反作弊手段 对于秒杀或者抢购等的海量请求,其实有很大一部分属于不正当的请求。不少用户,为了抢到“商品”,可能会采用一些类似刷票软件的工具,或者自己制作自动请求脚本,短时间发送大量的...

    高并发场景下的作弊与反作弊手段

    对于秒杀或者抢购等的海量请求,其实有很大一部分属于不正当的请求。不少用户,为了抢到“商品”,可能会采用一些类似刷票软件的工具,或者自己制作自动请求脚本,短时间发送大量的请求到后端服务,这些都属于作弊手段。有作弊,肯定就会有反作弊,长江的一些场景如下:

    1、同一个帐号,一次性发送大量请求。

    这些请求如果没有被处理,就会造成系统的数据请求的破坏,甚至导致一些逻辑被错误处理。解决办法是:先判断用户是否已经参与过抢购,如果没有,写入记录中;如果有,直接返回已经抢购中。并且在程序的入口,对用户做限定,一个用户只会有一个正常的请求处理,其他过滤,这样能防止负载均衡将用户的请求发送到不同的内部服务器上。

    2、多个帐号,一次性发送大量请求

    这种场景出现在业务早期,对用户的注册要求比较低,导致一些人随机注册了大量的帐号。这种场景可以检测用户的ip,发现某个ip频率较高,可以采取验证码或者直接决绝的方式保护系统。

    3、多个帐号,不同ip发送

    这个时候和真是用户的请求几乎区分不出来了,一方面可以提高业务的准入门槛来限制请求,另一方面可以结合数据挖掘,对用户的ip和帐号行为进行分析,比如帐号信息较少,只在一些特定的时候比i叫活跃等,都是僵尸号的一些特点。

    高并发场景下的优化思路

    1、请求接口的合理设计

    秒杀或者抢购页面,通常分为2个部分,静态页面和后端请求接口。通常,静态网页HTML等文件,可以通过CDN服务部署,不会有太大的压力,瓶颈在于后端的服务接口。要求后端接口尽量的快,一般建议后端接口尽量进行逻辑拆分,涉及到的存储使用内存等。

    2、过载与保护

    如果系统发生雪崩,贸然重启服务是不能解决问题的,这个时候,最好在流量入口进行控制。如果是缓存等服务也挂了,需要进行缓存的预热。当然,检测服务是否过载才是关键,若是服务满载,需要在业务顶层做服务拒绝处理。

    高并发场景下的数据安全

    多线程一定需要考虑线程数据安全,比如抢购环节,最后库存只剩一个,但是请求读取到的数据可能大于1,从而导致超发。解决思路有:

    1、悲观锁的思路

    在修改数据的时候,先锁定数据,保证只会有一个请求到达。但是,高并发下,每个请求都需要等锁,某些线程甚至可能永远等不到锁,请求就会死在那里。这些请求会很多,瞬间增大系统的平均响应实践,连接数被沾满,系统陷入异常。

    2、FIFO队列思路

    将请求发乳队列中,就不会造成有些请求永远等不到锁。但是,高并发下,很可能一瞬间将队列内存撑爆,或者说队列处理的速度远低于进入的速度,仍热会增大系统的响应时间,系统异常。

    3、乐观锁的思路

    每个请求的数据被处理之前,都会加上一个版本号,满足条件的版本号的请求被正确处理,其他请求直接拒绝返回。这个思路能解决前面两个的缺点,但是会增加CPU的运算量,设计上也稍微复杂一些。

    参考:

    高并发

     

     

    展开全文
  • JSON的使用场景及注意事项介绍

    千次阅读 2019-11-29 16:51:34
    介绍完JSON的数据格式,那我们来看看JSON在企业中使用的比较多的场景。 1.接口返回数据 JSON用的最多的地方莫过于Web了,现在的数据接口基本上都是返回的JSON,具体细化的场景有: Ajxa异步访问数据 RPC...

    上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Morningstar)一起从JS的数据类型中提取了一个子集,作为新的数据交换格式,因为主流的浏览器使用了通用的JavaScript引擎组件,所以在解析这种新数据格式时就不存在兼容性问题,于是他们将这种数据格式命名为 “JavaScript Object Notation”,缩写为 JSON,由此JSON便诞生了!

    今天我们来学习一下JSON的结构形式、数据类型、使用场景以及注意事项吧!

    一、JSON格式

    上面我们知道JSON是从JavaScript的数据类型中提取出来的子集,那JSON有几种结构形式呢?又有哪些数据类型呢?他们又分别对应着JavaScript中的哪些数据类型呢?

    1.JSON的2种结构形式

    1、键值对形式

    上期我们举了一个JSON的实例,就是键值对形式的,如下:

    {
      "person": {
        "name": "pig",
        "age": "18",
        "sex": "man",
        "hometown": {
          "province": "江西省",
          "city": "抚州市",
          "county": "崇仁县"
        }
      }
    }
    

    这种结构的JSON数据规则是:一个无序的“‘名称/值’对”集合。一个对象以 {左括号 开始, }右括号 结束。每个“名称”后跟一个 :冒号 ;“‘名称/值’ 对”之间使用 ,逗号 分隔,。
    在这里插入图片描述
    2、数组形式
    因为大多数时候大家用的JSON可能都是上面那种key-value形式,所以很多人在讲解JSON的时候总是会忽略数组形式,这一点是需要注意的。

    那JSON的数组形式是怎么样的呢?猪哥也举一个实例吧!

    ["pig", 18, "man", "江西省抚州市崇仁县"]
    

    数组形式的JSON数据就是值(value)的有序集合。一个数组以 [左中括号 开始, ]右中括号 结束。值之间使用 ,逗号 分隔。
    在这里插入图片描述

    2.JOSN的6种数据类型

    上面两种JSON形式内部都是包含value的,那JSON的value到底有哪些类型,而且上期我们说JSON其实就是从Js数据格式中提取了一个子集,那具体有哪几种数据类型呢?

    1. string:字符串,必须要用双引号引起来。
    2. number:数值,与JavaScript的number一致,整数(不使用小数点或指数计数法)最多为 15 位。小数的最大位数是 17
    3. object:JavaScript的对象形式,{ key:value }表示方式,可嵌套。
    4. array:数组,JavaScript的Array表示方式[ value ],可嵌套。
    5. true/false:布尔类型,JavaScript的boolean类型。
    6. null:空值,JavaScript的null。

    在这里插入图片描述
    以上数据形式图片来源JSON官方文档:http://www.json.org/json-zh.html

    二、JSON使用场景

    介绍完JSON的数据格式,那我们来看看JSON在企业中使用的比较多的场景。

    1.接口返回数据

    JSON用的最多的地方莫过于Web了,现在的数据接口基本上都是返回的JSON,具体细化的场景有:

    1. Ajxa异步访问数据
    2. RPC远程调用
    3. 前后端分离后端返回的数据
    4. 开放API,如百度、高德等一些开放接口
    5. 企业间合作接口

    这种API接口一般都会提供一个接口文档,说明接口的入参、出参等,
    在这里插入图片描述
    一般的接口返回数据都会封装成JSON格式,比如类似下面这种

    {
    	"code": 1,
    	"msg": "success",
    	"data": {
    		"name": "pig",
    		"age": "18",
    		"sex": "man",
    		"hometown": {
    			"province": "江西省",
    			"city": "抚州市",
    			"county": "崇仁县"
    		}
    	}
    }
    

    2.序列化

    程序在运行时所有的变量都是保存在内存当中的,如果出现程序重启或者机器宕机的情况,那这些数据就丢失了。一般情况运行时变量并不是那么重要丢了就丢了,但有些内存中的数据是需要保存起来供下次程序或者其他程序使用。

    保存内存中的数据要么保存在数据库,要么保存直接到文件中,而将内存中的数据变成可保存或可传输的数据的过程叫做序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

    正常的序列化是将编程语言中的对象直接转成可保存或可传输的,这样会保存对象的类型信息,而JSON序列化则不会保留对象类型!

    为了让大家更直观的感受区别,猪哥用代码做一个测试,大家一目了然
    在这里插入图片描述

    1. Python对象直接序列化会保存class信息,下次使用loads加载到内存时直接变成Python对象。
    2. JSON对象序列化只保存属性数据,不保留class信息,下次使用loads加载到内存可以直接转成dict对象,当然也可以转为Person对象,但是需要写辅助方法。

    对于JSON序列化不能保存class信息的特点,那JSON序列化还有什么用?答案是当然游有用,对于不同编程语言序列化读取有用,比如:我用Python爬取数据然后转成对象,现在我需要将它序列化磁盘,然后使用Java语言读取这份数据,这个时候由于跨语言数据类型不同,所以就需要用到JSON序列化。

    存在即合理,两种序列化可根据需求自行选择!

    3.生成Token

    首先声明Token的形式多种多样,有JSON、字符串、数字等等,只要能满足需求即可,没有规定用哪种形式。

    JSON格式的Token最有代表性的莫过于JWT(JSON Web Tokens)。
    在这里插入图片描述
    随着技术的发展,分布式web应用的普及,通过Session管理用户登录状态成本越来越高,因此慢慢发展成为Token的方式做登录身份校验,然后通过Token去取Redis中的缓存的用户信息,随着之后JWT的出现,校验方式更加简单便捷化,无需通过Redis缓存,而是直接根据Token取出保存的用户信息,以及对Token可用性校验,单点登录更为简单。
    在这里插入图片描述
    猪哥也曾经使用JWT做过app的登录系统,大概的流程就是:

    1. 用户输入用户名密码
    2. app请求登录中心验证用户名密码
    3. 如果验证通过则生成一个Token,其中Token中包含:用户的uid、Token过期时间、过期延期时间等,然后返回给app
    4. app获得Token,保存在cookie中,下次请求其他服务则带上
    5. 其他服务获取到Token之后调用登录中心接口验证
    6. 验证通过则响应

    JWT登录认证有哪些优势:

    1. 性能好:服务器不需要保存大量的session
    2. 单点登录(登录一个应用,同一个企业的其他应用都可以访问):使用JWT做一个登录中心基本搞定,很容易实现。
    3. 兼容性好:支持移动设备,支持跨程序调用,Cookie 是不允许垮域访问的,而 Token 则不存在这个问题。
    4. 安全性好:因为有签名,所以JWT可以防止被篡改。

    更多JWT相关知识自行在网上学习,本文不过多介绍!

    4.配置文件

    说实话JSON作为配置文件使用场景并不多,最具代表性的就是npm的package.json包管理配置文件了,下面就是一个npm的package.json配置文件内容。

    {
      "name": "server",       //项目名称
      "version": "0.0.0",
      "private": true,
      "main": "server.js",   //项目入口地址,即执行npm后会执行的项目
      "scripts": {
        "start": "node ./bin/www"  ///scripts指定了运行脚本命令的npm命令行缩写
      },
      "dependencies": {
        "cookie-parser": "~1.4.3",  //指定项目开发所需的模块
        "debug": "~2.6.9",
        "express": "~4.16.0",
        "http-errors": "~1.6.2",
        "jade": "~1.11.0",
        "morgan": "~1.9.0"
      }
    }
    

    但其实JSON并不合适做配置文件,因为它不能写注释、作为配置文件的可读性差等原因。

    配置文件的格式有很多种如:toml、yaml、xml、ini等,目前很多地方开始使用yaml作为配置文件。

    三、JSON在Python中的使用

    最后我们来看看Python中操作JSON的方法有哪些,在Python中操作JSON时需要引入json标准库。

    import json
    

    1.类型转换

    1、Python类型转JSON:json.dump()

    # 1、Python的dict类型转JSON
    person_dict = {'name': 'pig', 'age': 18, 'sex': 'man', 'hometown': '江西抚州'}
    # indent参数为缩进空格数
    person_dict_json = json.dumps(person_dict, indent=4)
    print(person_dict_json, '\n')
    
    # 2、Python的列表类型转JSON
    person_list = ['pig', 18, 'man', '江西抚州']
    person_list_json = json.dumps(person_list)
    print(person_list_json, '\n')
    
    # 3、Python的对象类型转JSON
    person_obj = Person('pig', 18, 'man', '江西抚州')
    # 中间的匿名函数是获得对象所有属性的字典形式
    person_obj_json = json.dumps(person_obj, default=lambda obj: obj.__dict__, indent=4)
    print(person_obj_json, '\n')
    

    执行结果:
    在这里插入图片描述

    2、JSON转Python类型:json.loads()

    # 4、JSON转Python的dict类型
    person_json = '{ "name": "pig","age": 18, "sex": "man", "hometown": "江西抚州"}'
    person_json_dict = json.loads(person_json)
    print(type(person_json_dict), '\n')
    
    # 5、JSON转Python的列表类型
    person_json2 = '["pig", 18, "man", "江西抚州"]'
    person_json_list = json.loads(person_json2)
    print(type(person_json_list), '\n')
    
    # 6、JSON转Python的自定义对象类型
    person_json = '{ "name": "pig","age": 18, "sex": "man", "hometown": "江西抚州"}'
    # object_hook参数是将dict对象转成自定义对象
    person_json_obj = json.loads(person_json, object_hook=lambda d: Person(d['name'], d['age'], d['sex'], d['hometown']))
    print(type(person_json_obj), '\n')
    

    执行结果如下:
    在这里插入图片描述

    2.对应的数据类型

    上面我们演示了Python类型与JSON的相互转换,最开始的时候我们讲过JSON有6种数据类型,那这6种数据类型分别对应Python中的哪些数据类型呢?
    在这里插入图片描述

    3.需要注意的点

    1. JSON的键名和字符串都必须使用双引号引起来,而Python中单引号也可以表示为字符串,所以这是个比较容易犯的错误!
    2. Python类型与JSON相互转换的时候到底是用load/dump还是用loads\dumps?他们之间有什么区别?什么时候该加s什么时候不该加s?这个我们可以通过查看源码找到答案:不加s的方法入参多了一个fp表示filepath,最后多了一个写入文件的操作。所以我们在记忆的时候可以这样记忆:s表示转成字符串(str),不加s表示转成文件。在这里插入图片描述
    3. Python自定义对象与JSON相互转换的时候需要辅助方法来指明属性与键名的对应关系,如果不指定一个方法则会抛出异常!
      在这里插入图片描述
    4. 相信有些看的仔细的同学会好奇上面猪哥使用json.dumps方法将Python类型转JSON的时候,如果出现中文,则会出现:\u6c5f\u897f\u629a\u5dde这种东西,这是为什么呢?原因是:Python 3中的json在做dumps操作时,会将中文转换成unicode编码,并以16进制方式存储,而并不是UTF-8格式!

    四、总结

    今天我们学习了JSON的2种形式,切记JSON还有[...]这种形式的。

    学习了JSON的6种数据类型他们分别对于Python中的哪些类型。

    了解了JSON的一些使用场景以及实际的例子。

    还学习了在Python中如何使用JSON以及需要注意的事项。

    结合上期的JSON的诞生与发展介绍,我们JSON相关的知识基本就介绍的差不多,后面会出一些爬虫实际案例来教大家如何解析返回JSON数据。

    一个JSON知识点却分两篇长文(近万字)来讲,其重要性不言而喻。因为不管你是做爬虫、还是做数据分析、web、甚至前端、测试、运维,JSON都是你必须要掌握的一个知识点!

    展开全文
  • mycat的介绍及应用场景

    千次阅读 2018-07-30 16:00:37
    顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问 < firewall > < whitehost > < host host = "127.0.0.1" user = "mycat...

    Mycat 引言

    如果我有一个32核心的服务器,我就可以实现1个亿的数据分片,我有32核心的服务器么?没有,所以我至今无法实现1个亿的数据库分片。---Mycat's Plan

    背景

    随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上。这时集中式数据库系统表现出它的不足:

    (1)集中式处理,势必造成性能瓶颈;

    (2)应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;

    (3)集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。

    在这种形势下,集中式数据库将向分布式数据库发展。

    目标

    低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。

    MyCAT概述

    详细介绍请参考官网:http://mycat.io/

    MyCAT是一款由阿里Cobar演变而来的用于支持数据库==读写分离、分表分库==的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。基础架构如下:
    image

    MyCAT原理

    MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
    image

    MyCAT功能

    1.数据库分库分表

    通过某种条件,将同一数据库中的数据分散的存储到多个数据库中,已达到分散单台数据库设备负载的效果,这就是数据库分片。

    A.水平拆分:

    水平分库指的是将一个数据量庞大的数据表分别保存到不同的数据库里,即:现在有多个数据库,这个库保存同样结构的数据表,这些数据根据MyCat的算法,分别保存到符合自身要求的数据库的数据表中。

    水平拆分基本架构如下:

    image

    例子1.可根据id取模进行水平拆分

    image
    目前常用的分片规则有:

    求模分库:mod-long
    范围分库:auto-sharding-long
    Hash分库:hash-int
    月分库:sharding-by-month
    ER模型分库:childTable
    自定义分库:CustomRule(该方式需要自己实现分库算法)
    B. 垂直拆分

    不同的表切分到不同的数据库(主机)上,这就是垂直拆分。
    image

    2.读写分离

    定义:

    为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改查业务的生产服务器;第二台数据库服务器,仅仅接收来自第一台服务器的备份数据。一般来说,为了配置方便,以及稳定性,这两台数据库服务器,都用的是相同的配置。

    在实际运行中,第一台数据库服务器的压力,远远大于第二台数据库服务器。因此,很多人希望合理利用第二台数据库服务器的空闲资源。

    从数据库的基本业务来看,数据库的操作无非就是增删改查这4个操作。但对于“增删改”这三个操作,如果是双机热备的环境中做,一台机器做了这三个操作的某一个之后,需要立即将这个操作,同步到另一台服务器上。出于这个原因,第二台备用的服务器,就只做了查询操作。进一步,为了降低第一台服务器的压力,干脆就把查询操作全部丢给第二台数据库服务器去做,第一台数据库服务器就只做增删改了。
    image

    3.黑白名单限制

    在1.5版本,用户权限更全面,并且还有ip白名单和sql黑名单的功能。

    顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问

    <firewall> 
           <whitehost>
              <host host="127.0.0.1" user="mycat"/>
              <host host="127.0.0.2" user="mycat"/>
           </whitehost>
           <blacklist check="false">
           </blacklist>
    </firewall>

    设置很简单,很容易理解,只要设置了白名单,表示开启了防火墙,只有白名单的连接才可以进行连接。

    3、使用场景

    1. 单纯读写分离,此时配置最为简单,支持读写分离、主从切换
    2. 分库分表,对记录超过1000万的表进行水平拆分,最大支持1000亿单表水平拆分
    3. 多租户应用,每个应用一个数据库,但程序只需连接MyCAT,程序不改变,实现多租户化
    4. 报表系统,借住MyCAT分表能力,处理大规模的报表统计
    5. 替代Hbase,分析大数据
    6. 海量实时数据查询

    4.MYCAT监控

    1. 支持对Mycat、Mysql性能监控
    2. 支持对Mycat的JVM内存提供监控服务
    3. 支持对线程的监控
    4. 支持对操作系统的CPU、内存、磁盘、网络的监控
    展开全文
  • Ceph架构原理及使用场景介绍

    千次阅读 2018-11-06 13:13:04
    pool可以做故障隔离域,根据不同的用户场景不一进行隔离。 2.8 Ceph 数据扩容PG分布 场景数据迁移流程: 现状3个OSD, 4个PG 扩容到4个OSD, 4个PG 现状: 扩容后: 说明 每个OSD上分布很多...
  • Web安全-之文件上传漏洞场景

    千次阅读 2019-09-02 18:18:09
    1上传漏洞危害介绍 上传是Web中最常见的功能,如果上传功能存在设计、编码缺陷,就容易形成上传漏洞,从而成为致命的安全问题,攻击者可以通过上传脚本木马,实现查看/篡改/删除源码和任意涂鸦网页,可以连接和操作...
  • lua设计目的和应用场景介绍

    千次阅读 2018-08-21 14:34:24
    设计目的 其设计目的是为了嵌入应用程序中,从而为应用程序提供...安全系统,如入侵检测系统 其他应用参考官方 第一个 Lua 程序 接下来我们使用 Lua 来输出 "Hello World!" print ( "Hello World!" )
  • RabbitMQ的应用场景以及基本原理介绍

    万次阅读 多人点赞 2017-02-09 23:30:02
    2.应用场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才...
  • 自动驾驶测试场景构建目前尚无统一标准,Voyage开源了他们自动驾驶测试的部分场景,花时间把相关的测试场景文档进行了阅读,下面把阅读的笔记进行分享,希望能给从事自动驾驶测试相关工作的人有所帮助,共同促进行业...
  • 这里简单写一些区别,只代表我的个人观点,不代表公司的官方说明Oracle等由于美国法律限制,其安全等级较高的数据库是禁止向中国出口的GBase8s 达到了国标三级安全标准系统采用硬件加密,密匙不出卡,最大限度保证了...
  • 介绍 ForkJoinPool 的适用场景,实现原理

    万次阅读 多人点赞 2019-06-17 16:05:53
    本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。 说在前面 可以说是说明,也可以说下面是结论: ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ...
  • Java基础与应用场景介绍(一)

    千次阅读 2019-02-22 00:38:57
    结论:我想要效率高,同时线程还是安全的,可以使用ConcurrentHashMap,通过把整个Map分为n个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N被,默认提升16倍。 实现拷贝文件的工具类使用字节流...
  • mysql视图使用场景和语法介绍

    千次阅读 2019-02-12 10:04:53
    为什么要使用视图,视图是对sql语句的封装,可以提高sql语句的安全性,减少重复sql语句的使用,提高开发效率. 使用场景:  比如说有一张表叫做会员表,会员表中有个字段叫做bus_id即公司表的id,此时我们想根据这个bus_id...
  • 后疫情时代的新社会模式及经济形态必将催生出新的商业模式,在线业务及相关应用场景的流量呈现井喷式发展,常规的离线系统及离线机器学习平台已无法满足业务发展要求。人口红利吃尽之后,基于大数据及AI平台的业务...
  • 介绍Redis的各种用途以及使用场景

    万次阅读 多人点赞 2017-12-02 08:31:07
    专注JavaWeb开发 2017-11-22 10:10:36 Redis 一、为什么使用 解决应用服务器的cpu和内存压力 减少io的读操作,减轻io的压力 ...关系型数据库的扩展性不强,难以改变表结构 ...nosql数据库没有关联关系...三、适用场景
  • 线程安全的CopyOnWriteArrayList介绍

    万次阅读 多人点赞 2017-01-17 16:07:19
    证明CopyOnWriteArrayList是线程安全的先写一段代码证明CopyOnWriteArrayList确实是线程安全的。ReadThread.javaimport java.util.List;public class ReadThread implements Runnable { private List<Integer> list...
  • Java 四种引用介绍及使用场景

    万次阅读 多人点赞 2018-01-28 00:28:10
    强引用-FinalReference 介绍: 强引用是平常中使用最多的引用,强引用...可用场景: 地球人都知道,但是我讲不出来。 软引用-SoftReference 介绍: 软引用在程序内存不足时,会被回收,使用方式: // 注...
  • RabbitMQ的应用场景、基本原理介绍

    万次阅读 多人点赞 2018-05-25 14:15:14
    2.应用场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才...
  • nginx ats squid varnish使用场景对比介绍

    千次阅读 2015-06-20 13:27:43
    下面,我们将介绍自建CDN的具体建设规划,主要从以下几个方面进行考量:硬件成本、带宽成本、架构设计、实际部署。 硬件成本 在硬件上,我们选型的需求是在1U的基础上具有强劲的性能,同时性价比要高。 ...
  • 安全随笔2:对称加密应用场景

    千次阅读 2013-11-27 14:01:34
    首先,简单介绍下这两类算法。图9-1是对称算法的示意图: 图9-1 对称算法 在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但是必须要求加密密钥和解密密钥之间能够互相推算出来。在最...
  • 通常我们按照使用场景将定位技术分为室内定位和室外定位两种,室外定位主要依赖于GPS、北斗、GLONASS、GALILEO这些全球卫星定位导航系统,此外还有差分定位技术、电信运营商的基站蜂窝网定位技术;室内定位技术主要...
  • 使用场景 大数据存储 HDFS HDFS是一个分布式的文件系统,它具有高度的容错,高吞吐量,弹性伸缩等优点。是高度容错性和高吞吐量的海量数据存储解决方案。 高容错性 HDFS通过多方面保证数据的可靠性...
  • 安全架构-md5算法介绍

    千次阅读 2020-12-21 14:09:02
    二、特点三、作用四、应用场景4.1 一致性验证4.2 数字签名4.3 安全访问认证五、md5破解 一、md5是什么? MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个...
  • 在Java 1.5之前,如果想要实现一个可以在多线程和并发的程序中安全使用的Map,只能在HashTable和synchronized Map中选择,因为HashMap并不是线程安全的。但再引入了CHM之后,我们有了更好的选择。CHM不但是线程安全的...
  • 作者 | 章磊责编 | Aholiab出品 | CSDN、ARPA在我们之前的“多方安全计算”系列文章中,我们首先通过姚期智教授的“百万富翁问题”引出了数据安全计算这个密...
  • KubeSphere简介,KuberSphere简介1.1 功能介绍Kubernetes 资源管理微服务治理多租户管理DevOps 工程Source to Image多维度监控自研多租户告警系统日志查询与收集应用管理与编排基础设施管理多存储类型支持多网络方案...
  • 深入浅出多线程编程实战(五)ThreadLocal详解(介绍、使用、原理、应用场景) 文章目录一、ThreadLocal简介二、ThreadLocal与Synchronized区别三、ThreadLocal简单使用四、ThreadLocal原理五、ThreadLocal 应用场景 ...
  • 5G专用网络(private 5G network)是一种局域网(LAN),它将使用5G技术创建具有统一连接性、优化服务和特定区域内安全通信方式的专用网络 。此前,机构曾预测2020年全球5G专网市场规模将达到9.197亿美元, 2020年至...
  • 文章目录前言AtomicInteger的简单使用Atomic介绍CAS的实现原理一定会有人疑问,既然++的操作都没有办法保证原子性操作,那么CAS又如何能保证是一个原子性操作?Atomic存在的三个问题 前言 前面两个章节,通过解释...
  • 1、背景介绍  HashList

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,815
精华内容 96,326
关键字:

安全场景介绍