Web
文章平均质量分 72
蓝绿色~菠菜
对技术有一颗敬畏和严谨之心,对代码有精益求精的精神。像养小孩和女朋友一样,精心照料和打扮。想清楚了再干,坚持高标准,Design for future!
展开
-
缓存一致性问题解决方案
四种方案:先写缓存,再写数据库(差)先写数据库,再写缓存(一般)先删缓存,再写数据库(能接受)先写数据库,再删缓存(比较优秀)原创 2022-04-07 17:25:26 · 13154 阅读 · 8 评论 -
SaaS多租户数据隔离方案
多租户在数据存储上存在三种主要的方案,分别是:1. 独立数据库即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。缺点:增多了数据库的安装数量,随之带来维护成本和购置成本的增加。这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。如果面对的是银行、医院等需要非常高数据隔离级别的租户,可以选择这种模原创 2021-07-31 15:20:08 · 1435 阅读 · 0 评论 -
动态路由前端控制还是后端控制?
1. 一个原则做权限管理,一个核心思想就是后端做权限控制,前端做的所有工作都只是为了提高用户体验,我们不能依靠前端展示或者隐藏一个按钮来实现权限控制,这样肯定是不安全的。就像用户注册时需要输入邮箱地址,前端校验之后,后端还是要校验,两个校验目的不同,前端校验是为了提高响应速度,优化用户体验,后端校验则是为了确保数据完整性。权限管理也是如此,前端按钮的展示/隐藏都只是为了提高用户体验,真正的权限管理需要后端来实现。这是非常重要的一点,做前后端分离开发中的权限管理,我们首先要建立上面这样的思考框架,原创 2021-04-15 15:21:20 · 1377 阅读 · 3 评论 -
如何使用ngrok内网穿透让外网可以访问你本地的网站
当你在本地开发一个网站的时候,你希望转发给别人进行访问,但是又不想正式部署到服务器(毕竟部署也是挺麻烦的)。除此以外,有时本地测试还需要依赖https,比如OAuth身份验证和第三方支付应用。一款叫Ngrok的免费软件获取可以帮到你,它通过本地端口映射轻松实现内网穿透,把localhost上运行的内容重定向到一个公网可用的ngrok URL(支持https), 是不是很帅?Ngrok的安装1、如果你本地使用的是windows系统,首先访问它的官网:https://ngrok.com/down..原创 2020-12-18 20:27:49 · 1079 阅读 · 0 评论 -
FTP主动模式与被动模式的区别及如何选择
1、PORT(主动模式) PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图: 2、PASV(被动模式) PASV是Passive的缩写,中文成为被动模式,...原创 2020-10-28 17:31:48 · 1896 阅读 · 0 评论 -
Docker部署FTP服务器
1、拉取镜像docker pullftpgrab/ftpgrab2、启动docker run -d -v /Users/peijianbo/ftp:/home/vsftpd \ -p 21:21 -p 20:20 -p 21100-21110:21100-21110 \-e FTP_USER=test -e FTP_PASS=test \-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \-e PASV_ADDRESS=19...原创 2020-10-28 17:32:27 · 2083 阅读 · 0 评论 -
数据库多级联动表结构设计
以省市区县四级联动为例:方案一:建立多个数据库表,低级表结构中只包含上一级表中id。省表 市表 区表 县表 province city district county id province_id city_id district_id 优点:此设计完全解开了各层之间的耦合性,用类似于链表的形式将多层数据关系起来。 可以节约大量的数据库空间。 维护方便。如果发生了新增和修改操作时,只要修改与之相关的那个表的主键即可。缺点原创 2020-08-11 21:27:39 · 5133 阅读 · 4 评论 -
开发一个大型后台管理系统,应该用前后端分离的技术方案吗?
1. 先审题,冷静的分析一下前后端分离的优点多多,这不需要多说,人人都清楚。结合“开发一个大型后台管理系统”这个约束条件,冷静的分析一下:什么是后台管理系统:首先后台管理系统这个称呼,意味着这是一个 B 端系统。可以小到部门级应用(客户投诉登记系统、办公设备台账系统),大一点可以是大集团级核心系统(500 强保险公司客服、呼叫中心),可以是 ERP、CRM、OA(SAP、用友、泛微协同),可以是一个 B2C 电商的商城后台、支付网关管理控制台,可以是 Saas 的管理后台(Salesforce、原创 2020-06-24 13:20:45 · 1930 阅读 · 0 评论 -
Nginx+Gunicorn(开启多worker)运行Django/Flask应用程序时关于共享内存(全局变量)的注意事项
关于单例模式:问题:单例模式在本地测试时一切正常,当运行在生产环境下,单例不生效,会创建出多个实例。原因:Django/Flask本地环境的runserver为单进程多线程,单进程下当然共享一份内存,而在生产环境的多worker下,每个进程都有自己的内存空间,因此也有自己的实例。关于全局变量:同样的问题,在生产环境中,多个worker之间是无法共享一个全局变量的,一个work...原创 2020-04-22 14:13:13 · 3506 阅读 · 0 评论 -
表单重复提交解决方案
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:1. 点击提交按钮两次。2. 点击刷新按钮。3. 使用浏览器后退按钮重复之前的操作,导致重复提交表单。4. 使用浏览器历史记录重复提交表单。5. 浏览器重复的HTTP请求。 用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问...原创 2020-04-07 10:37:38 · 3022 阅读 · 0 评论 -
一线大厂的分布式唯一ID生成方案
一、UUID这个方案是小伙伴们第一个能过考虑到的方案优点:代码实现简单。 本机生成,没有性能问题 因为是全球唯一的ID,所以迁移数据容易缺点:每次生成的ID是无序的,无法保证趋势递增 UUID的字符串存储,查询效率慢 存储空间大 ID本事无业务含义,不可读应用场景:类似生成token令牌的场景 不适用一些要求有趋势递增的ID场景二、MySQL主键自增...原创 2020-04-07 10:14:26 · 944 阅读 · 0 评论 -
Web分页优化的四种方式
背景:在大数据量的情况下,原本很简单的分页如果没有处理好,你会发现分页的请求会消耗你大量的数据库时间。如果你遇到了这个问题,文章给了你几个很好的解决的方案。当然,初学者若能看完这篇文章,那么它会指导你写出更具有扩展性的分页代码。思路:1、全部缓存查询结果。把查询结果全部缓存起来,并定时更新(例如文件缓存、静态化结果页面等)。2、不详细显示总共有多少分页。Google搜索结果的分页显...原创 2020-03-17 13:37:19 · 587 阅读 · 0 评论 -
Web分页显示的三种实现方式
其一:纯JS实现分页一次性查询记录并加载到html的table中。然后通过选择性地显示某些行来达到分页显示的目的。这是一种伪分页,障眼法而已。只能用于数据少的情况下。一旦数据多了,十几万条数据加载到html中会变得很慢。而且不实时,一次加载完后数据就写死在页面了,若数据库中有变化,浏览器端显示的仍是上次加载过来的数据。其二:一次查询,分批显示就是说,我们可以执行一个数据库查询操作...原创 2020-03-17 13:25:25 · 3134 阅读 · 0 评论 -
Python利用pywss库实现Websocket
pywss是一种类似Flask开发的WebSocket-Server服务端框架,适用python3.X一、安装pip install pywss二、使用from pywss import Pyws, route@route('/websocket')def my_websocket(request, data): print(‘客户端发来数据:%s’ %...原创 2020-03-10 15:21:15 · 4921 阅读 · 2 评论 -
Django利用dwebsocket实现Websocket
一、什么是WebsocketWebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如...原创 2020-03-10 14:04:50 · 382 阅读 · 0 评论 -
Django对接Elasticsearch实现全文检索
1. 需求分析当用户在搜索框输入关键字后,我们要为用户提供相关的搜索结果。这种需求依赖数据库的模糊查询like关键字可以实现,但是like关键字的效率极低,而且查询需要在多个字段中进行,使用like关键字也不方便。我们引入搜索引擎来实现全文检索。全文检索即在指定的任意字段中进行检索查询。2. 搜索引擎原理通过搜索引擎进行数据查询时,搜索引擎并不是直接在数据库中进行查询,而是搜索...原创 2020-01-10 17:46:59 · 1232 阅读 · 6 评论 -
RPC技术到底为何物?
RPC概念RPC即远程过程调用(Remote Procedure Call),这么讲你可能不明白,画个图比如两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或者方法,由于不在一个内存空间,不能直接调用,这时候需要通过就可以应用RPC框架的实现来解决。1、 RPC核心过程既然它的意思是客户端和服务端之间数据交互的过程,那包含了哪些东西?rpc依然遵...原创 2020-01-08 15:20:26 · 315 阅读 · 0 评论 -
互联网公司分布式系统架构演进之路
介绍分布式和集群的概念经常被搞混,现在一句话让你明白两者的区别。分布式:一个业务拆分成多个子业务,部署在不同的服务器上集群:同一个业务,部署在多个服务器上例如:电商系统可以拆分成商品,订单,用户等子系统。这就是分布式,而为了应对并发,同时部署好几个用户系统,这就是集群1 单应用架构2 应用服务器和数据库服务器分离单机负载越来越来,所以要将应用服务器和数据库服务器分离...原创 2020-01-08 14:25:06 · 326 阅读 · 0 评论 -
Web表单提交漏洞
一、漏洞的存在某些网站服务端存在权限校验漏洞,使得前端可以随意提交任何表单信息。二、漏洞演示1、以下是某网站表单信息。对于普通用户是无法提交表单信息的,该网站仅仅隐藏了提交按钮,但内容仍可编辑。可以通过尝试直接在浏览器的html中加入<button type='submit'>来提交。如何该网站服务端没有设置相应提交权限,则会修改成功。2、以下是另一个网站...原创 2019-12-20 12:58:34 · 1898 阅读 · 0 评论 -
XSS攻击
1、XSSXSS(Cross Site Scripting)攻击全称跨站脚本攻击,为了不与CSS(Cascading Style Sheets)混淆,故将跨站脚本攻击缩写为XSS,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。通俗的来说就是我们的页面在加载并且渲染绘制的过程中,如果加载并执行了意料之外的程序或代码(脚本、样式)...原创 2019-12-20 10:55:40 · 853 阅读 · 2 评论 -
JWT实现分布式站点的单点登录
什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直...原创 2019-11-19 15:49:13 · 853 阅读 · 0 评论 -
大型网站核心架构因素
关于什么是架构,一种比较通俗的说法是 “最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终蓝图。从这个意义上说,人生规划也是一种架构。选什么学校、学什么专业、进什么公司、找什么对象、过什么样的生活,都是自己人生的架构。联系到软件开发:实际上业务类型+技术选型往往也决定整个项目的架构是怎么样的。具体到软件架构,维基百科是这样定义的:”有关软件整体结构与组件的...原创 2019-11-13 10:06:00 · 708 阅读 · 0 评论 -
django并发处理下单、秒杀、金融服务等业务
一、问题分析:在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。正如下面这张图:甲、乙同时下单购买A商品,下单前都查到库存都为15,而下单时,甲稍快些买走了10件,实际库存还剩5件,而乙下单时,仍然用库存15来判断,最终会导致商品库存大于售出。二、解决思路悲观锁当查询某条记录时,即让数据库为该记录加锁,锁住记...原创 2019-06-05 10:32:26 · 7718 阅读 · 0 评论 -
web系统密码存储策略
前些日子IT界很火的一则新闻是某酒店的数据库泄露问题,身边很多人在讨论数据库安全的问题,大家经常说提升密码复杂度、加密等,但是很多人并不知道在开发的时候,用户的密码怎么处理,或者说,处理的并不恰当,这篇文章主要介绍在系统设计的过程中,我们的密码究竟应该怎么处理才最大限度的保证安全。密码加密的重要性?还是从脱库说起,数据库被人拉走了,最可怕的是什么?个人手机、身份证、地址??这些是...原创 2019-07-31 17:29:42 · 2682 阅读 · 0 评论 -
odoo基础教程
https://segmentfault.com/a/1190000013472741原创 2019-03-18 16:49:05 · 6517 阅读 · 0 评论 -
理解OAuth 2.0
一、应用场景为了理解OAuth的适用场合,让我举一个假设的例子。有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。问题是只有得到用户的授权,Google才会同意"云冲印"读取这些照片。那么,“云冲印"怎样获得用户的授权呢?传统方法是,用户将自己的Google用户名和密码,告诉"云冲印”,后者就可以读...原创 2019-05-30 15:50:20 · 6215 阅读 · 0 评论 -
消息推送、在线聊天系统实现思路
实现思路:a. 轮询特点:每隔一段时间不断向后端发送ajax请求缺点:消耗大 有延迟 响应的结果没有顺序(因为是异步请求,当发送的请求没有返回结果的时候,后面的请求又被发送。而此时如果后面的请求比前面的请 求要先返回结果,那么当前面的请求返回结果数据时已经是过时无效的数据了)。实例:小型项目会用到b. 长轮询定义:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新...原创 2019-06-04 16:52:48 · 4832 阅读 · 0 评论 -
web项目处理高并发解决思路
一、CDN缓存(网络请求上游)CDN其实是一种资源的分布式存放和备份的方法。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、秒杀、点播、直播等场景。使用户可以就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。通俗讲就是讲web服务器上的资源进行缓存,用户请求时,在网络请求的上游就可以就近将资源分发给用户。而不需要所有的用户都去web跟服务...原创 2019-06-06 10:14:43 · 11444 阅读 · 3 评论 -
Web项目高并发多请求的实现原理,采用多线程or多进程?
以django为例:django自带runserver处理请求方式django自带Gateway组件(类似Gunicorn 或者 uWSGI)实现并发处理多请求,runserver 默认是单进程多线程。django-admin and manage.py:The development server is multithreaded by default. Use the --noth...原创 2019-11-06 11:06:09 · 2427 阅读 · 0 评论