自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (2)
  • 收藏
  • 关注

原创 《从0开始学架构》——可扩展:基本思想、模式、分层架构、SOA

本系列是极客时间《从0开始学架构》的读书笔记。一、可扩展架构的基本思想与模式对应《32 | 可扩展架构的基本思想和模式》软件系统相对于硬件来说,具有可扩展性。一个软件不停地扩展,说明它本身充满了活力。我们经常将软件架构类比为建筑图纸,将开发软件类比为工程施工。这个类比有一个不协调的地方在于,没人会在开工后再对建筑结构指手画脚,而新的需求总是充满整个软件的生命周期。另外一个类比是开飞机...

2018-12-16 22:51:04 472

原创 《从0开始学架构》——高可用:异地多活和接口级故障

本系列是极客时间《从0开始学架构》的读书笔记。一、异地多活对应《28 | 业务高可用的保障:异地多活架构》《29 | 异地多活设计4大技巧》《30 | 异地多活设计4步走》在上一篇提到过,如果部分节点的故障是地理级别的话,最好做数据分区备份架构。但是,由于备份系统正常情况下是不对外提供服务的,所以把备份数据恢复到正常情况,需要很长时间。这个很长时间,并不是指的系统启动的时间,而是由...

2018-11-22 16:01:52 617

原创 《从0开始学架构》——高可用:存储高可用和计算高可用

本系列是极客时间《从0开始学架构》的读书笔记。如果部分节点出现故障了,通过冗余可以提高可用性。若故障是数据无法访问,对应的就是存储高可用架构;若故障是计算失败,对应的就是计算高可用架构。一、存储高可用架构对应《25 | 高可用存储架构:双机架构》《26 | 高可用存储架构:集群和分区》存储高可用,本质是将数据复制到多个存储设备,通过数据冗余的方式,来实现高可用。复杂性主要体现在如...

2018-11-12 22:37:56 1098

原创 《从0开始学架构》——高可用:CAP理论和FMEA方法

本系列是极客时间《从0开始学架构》的读书笔记。接下来就是高可用部分了。一般来讲,相对于高性能来说,高可用的复杂度更高,因为高可用的异常情况太多,只要稍有疏漏,就会埋下隐患。当然只是对一般情况而言。对于高性能来讲,有一种方法是采用集群,来将海量请求分发到不同的机器上,从而提高性能。相对应的,高可用也可采用集群,来避免单点出现故障时,服务不可用。总结下,高可用场景下采用集群的原理是增加了冗余...

2018-11-11 21:32:03 1349

原创 《从0开始学架构》——高性能架构模式

本系列是极客时间《从0开始学架构》的读书笔记。很多情况下,高性能设计的核心就是存储系统的设计,而关系型数据库由于ACID特性和强大的SQL功能,是存储系统的核心部分。一、高性能数据库由于互联网的发展,海量数据的出现,数据库的发展远远跟不上业务,所以现在数据库的高性能需要通过集群来实现。第一种方式,读写分离,将访问压力分散到集群中的各节点。第二种方式,分库分表,既可以分散访问压力,还可以...

2018-11-02 14:27:48 522

原创 《从0开始学架构》——架构设计的原则与流程

本系列是极客时间《从0开始学架构》的读书笔记。我们已经知道了架构设计的定义、历史源流、来源等等背景知识。一、三原则对应《08 | 架构设计三原则》既然架构设计关键在于取舍,那取舍的依据原则是什么?作者提出了三条原则:合适、简单、演化。合适优于业界领先。简单优于复杂。演化优于一步到位。这三条看起来简单,但想想还真就是这么一回事。二、案例对应《09 | 架构设计原则案例》...

2018-10-31 16:11:06 5358 1

原创 《从0开始学架构》——架构设计的复杂度来源

本系列是极客时间《从0开始学架构》的读书笔记。既然架构设计也是一种为了解决高复杂度问题的方案,那这些高复杂度问题从何而来呢?一、高性能对应《04 | 复杂度来源:高性能》主要体现在两方面:单机复杂度和集群复杂度。在单台机器上,为了高性能,先后出现了批处理系统、分时系统、并行系统。分时系统分为多进程和多线程。但是在单核上,虽然多进程和多线程对用户来讲是并行的,但本质只是并发(逻...

2018-10-29 22:29:31 311

原创 《从0开始学架构》——什么是架构设计

本系列是极客时间《从0开始学架构》的读书笔记。一、什么是架构对应《01|架构到底是指什么?》作者首先梳理了系统和子系统、模块和组件、架构和框架这些概念的区别和联系。评论区有位说得很明白:架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。按照我的理解,架构的维度是最大的,一般我们会讲业务架构和技术架...

2018-10-29 22:28:50 3686

原创 对文本使用tf_idf算法进行分析的项目记录(二)

上回写的是使用消息队列来做这个项目,这次完全抛弃了它。为什么抛弃呢?我当初设想的是,步骤很明确,完全可以独立开,这样消息队列正好适配。 但是,我对处理速度和吞吐量没有明确的概念,导致如果用之前的方案的话,屈屈30w文章就能跑上好几天。为什么会这么慢呢?原因一,处理的个体太小。按照我的设想每个文档每个步骤都会往队列里塞一个消息,结果导致处理的数据量巨大无比。如果能够...

2018-09-08 22:00:01 342

原创 使用rabbitmq对文本使用tf_idf算法进行分析的项目记录

之前用爬虫爬了三个源,共爬取了30w左右的博客,爬虫项目:itmap_spiders。接着对这些文本进行分析,要求是找出每篇文章的关键词。我对TF*IDF算法有一些了解,就选择了它。项目:itmap_data_analysis。业务架构由于数据量有点大,所以使用消息队列进行拆分,拆分标准是按照步骤来。具体的步骤如下图所示。技术栈:使用pika来与RabbitMQ连接...

2018-09-02 17:45:49 170

原创 使用rabbitmq对文本使用tf_idf算法进行分析的项目记录

之前用爬虫爬了三个源,共爬取了30w左右的博客,爬虫项目:itmap_spiders。接着对这些文本进行分析,要求是找出每篇文章的关键词。我对TF*IDF算法有一些了解,就选择了它。项目:itmap_data_analysis。业务架构由于数据量有点大,所以使用消息队列进行拆分,拆分标准是按照步骤来。具体的步骤如下图所示。architec...

2018-09-02 17:42:00 142

原创 python list 删除元素

以num_list = [1, 2, 2, 3, 4, 5]为例。删除一个可以确定的元素,一共有三种方法。 1. num_list.remove(2),会删除第一个值为2的元素。 2. num_list.pop(1),会弹出索引为1的元素,若不传参数,则弹出最后一个元素。 3. del num_list[1],会删除索引为1的元素。 4. 还可以使用切片来达到目的,属于重新构造一个新的...

2018-08-08 16:10:49 243

原创 python list 删除元素

以num_list = [1, 2, 2, 3, 4, 5]为例。删除一个可以确定的元素,一共有三种方法。num_list.remove(2),会删除第一个值为2的元素。num_list.pop(1),会弹出索引为1的元素,若不传参数,则弹出最后一个元素。del num_list[1],会删除索引为1的元素。还可以使用切片来达到目的,属于...

2018-08-08 16:10:00 183

原创 [总结]python逐行性能分析

总是忘记,做个记录。性能定义一般而言,处理一个请求的速度是一个重要的性能指标(Latency, 系统延迟)。观察工具有时候不需要特殊工具,直接看一个http请求的时长即可。定位瓶颈line_profiler是一个可以查看每行代码的执行次数、执行时间的工具。安装好后,可以在代码中对方法/函数添加装饰器@profile,然后在命令行使用kernprof -l -...

2018-08-02 17:35:17 603

原创 [总结]python逐行性能分析

总是忘记,做个记录。性能定义一般而言,处理一个请求的速度是一个重要的性能指标(Latency, 系统延迟)。观察工具有时候不需要特殊工具,直接看一个http请求的时长即可。定位瓶颈line_profiler是一个可以查看每行代码的执行次数、执行时间的工具。安装好后,可以在代码中对方法/函数添加装饰器@profile,然后在命令行使用kernp...

2018-08-02 17:34:00 279

原创 [提炼&总结]账户系统的设计

最简单一般而言,系统内都会有用户模块,如果涉及到钱、积分、兑换券之类的,那么最好搞一套账户模块。简单的账户模块分为两部分,账户和流水记录。 在这种简单的模块内,典型的场景是用户做了某个操作,达到了预设条件,于是系统给予奖励,生成一条流水记录,该用户的账户内的金额也随之增加。用户也可以进行消费或提现,此时生成流水记录后,该用户的账户内金额是减少的。当然,用户还可以进行充值。稍微...

2018-07-30 16:06:58 3492 1

原创 [提炼&总结]账户系统的设计

最简单一般而言,系统内都会有用户模块,如果涉及到钱、积分、兑换券之类的,那么最好搞一套账户模块。简单的账户模块分为两部分,账户和流水记录。最简单的账户模块在这种简单的模块内,典型的场景是用户做了某个操作,达到了预设条件,于是系统给予奖励,生成一条流水记录,该用户的账户内的金额也随之增加。用户也可以进行消费或提现,此时生成流水记录后,该...

2018-07-30 16:05:00 1514

原创 [提炼&总结]ORM连接ODM

ORM:Object Relational Mapping。比较著名的有Django的ORM,SQLAlchemy。 ODM:Object Document Mapping,本质也属于一种ORM,不过是基于MongoDB、Redis这种NoSQL的。这个词我感觉并不是业界通用的,首先在搜索引擎上,这个词没什么相关的结果;其次,MongoDB可以讲Document,但是Redis就不合适了。我用过...

2018-07-27 11:42:50 504

原创 [提炼&总结]ORM连接ODM

ORM:Object Relational Mapping。比较著名的有Django的ORM,SQLAlchemy。ODM:Object Document Mapping,本质也属于一种ORM,不过是基于MongoDB、Redis这种NoSQL的。这个词我感觉并不是业界通用的,首先在搜索引擎上,这个词没什么相关的结果;其次,MongoDB可以讲Docum...

2018-07-27 11:39:00 342

原创 调整Django菜单顺序

不修改Django源码让admin中的Model列表按注册顺序显示from django.contrib import adminfrom django.utils.text import capfirstfrom django.utils.datastructures import OrderedDictdef find_model_index(name): count ...

2018-07-17 18:13:00 3753

原创 [code snippet]微信随机红包算法实现

class RedEnvelopeError(ValueError): """ 红包赋值错误 """class RedEnvelope: def __init__(self, name=None): self.name = 'red_envelope:{}'.format(uuid.uuid1().hex) if name is None ...

2018-07-17 18:02:00 481

原创 pythonhtml2image: imgkit 和 wkhtmltoimage的坑

场景需要根据信息,将一个动态页面生成图片。经过调研,发现只有imgkit符合要求。imgkit其实是调用wkhtmltopdf的wkhtmltoimage(wkhtmltopdf包含wkhtmltopdf和wkhtmltoimage两个工具)来实现功能。wkhtmltopdf和wkhtmltoimage是通过调用QT来实现功能:wkhtmltopdf and wkhtmltoimage...

2018-07-12 17:24:00 6832

原创 django migrate m2m字段

Migrating a Django ManyToManyField to use a new 'through' Model背景是根据业务需要,需要对m2m关系做更详细的记录,这样之前使用的Django默认生成的m2m字段就没法用了,需要自己创建一个m2m关系表。步骤一,创建新的m2m关系表。步骤二,迁移数据。步骤三,删除原先的m2m字段。步骤...

2018-06-28 20:13:00 284

原创 mac 移动硬盘未挂载

大体参考:https://itstillworks.com/drive-not-mounting-mac-terminal-12058343.html格式如下:sudo mount -t apfs -o rdonly /dev/disk2s3 /Volumes/disk2s3指的注意的是,参考中hfs被我替换成了apfs,这样根据具体的情况来选择。...

2018-06-25 22:20:00 8479

原创 python wsgi+Odoo 的启动

参考:WSGI初探Odoo web 机制浅析python的 WSGI 简介python wsgi 简介wsgi的定义一个请求从客户端发到服务端,具体需要怎么样才能无缝对接呢?在python中,服务端负责实际处理逻辑的有好几种,常见的也就是被大家所熟知的各个框架,如Django、Flask等。那请求经过怎样的处理进入到这些负责具体逻辑的框架呢?那肯定不会是一个框架一个处理方式,那肯...

2018-06-05 22:11:00 1069

原创 分析一个手游都有哪些业务模块

昨天在B站看了广告,下了一款叫做《黑暗料理王》的手游。稍微玩了一下,感觉这款游戏是比较典型的:玩法典型、要素典型、等等。要是我小时候,说不定会玩得很开心,要是前几年我说不定能玩好久,但现在我上手一番却只想着这游戏到底怎么才能做出来(悲哀啊)。下面就试着分析一下吧,专注于业务模块,技术模块想到就说。按理来说,应该是先讲MVP(Min Valuable ...

2018-06-02 23:36:00 1083

原创 flask/odoo/werkzeug的url mapping

参考:Werkzeug库——routing模块flask 源码解析:路由odoo(8.0)源码werkzeug(0.14.1)源码flask(0.11.1)源码一个web框架必须解决一个问题:当一个Request进入系统时,怎样去确定使用哪个函数或方法来处理。Django自己处理这个问题。Flask和Odoo(一个OpenERP)使用Werkzeug库(本身就是Flask的关联...

2018-05-31 22:54:00 451

原创 django middleware

参考:Django 源码学习(3)——中间件Django Middleware官方文档Django==2.0.4源码一、相关代码分布middleware加载:django.core.handlers.base.BaseHandler的load_middleware()。运行时:django.utils.deprecation.MiddlewareMixin。django.core....

2018-05-29 00:29:00 274

原创 [code snippet]优先级的妙用

位置参数默认为None,但该参数默认是一个可迭代对象。如果不传参的话:In [8]: def func(iter_obj=None): ...: for item in iter_obj: ...: print item ...:In [9]: func()-------------------------...

2018-05-24 23:24:00 184

原创 Django JWT

参考基于 Token 的身份验证、JSON Web Token - 在Web应用间安全地传递信息、基于cookie的django-rest-jwt认证前两篇是关于原理的,最后一篇是和django-restframework相关的。JWT原理除了使用session外,还可以使用token进行用户认证(Authentication)。一个很大的区别是,session需要在服务端存储能...

2018-05-21 18:32:00 905

原创 [工具&笔记]scrapy相关和docker部分

示例:architecture_spiderScrapy 相关参考scrapy文档,scrapyd文档scrapy的架构非常清晰。scrapy的架构一般一个非常简单的爬虫,只需要创建一个Spider,定义一个Item,加上部分setting即可。如果对结果存储有要求,那就加一个ItemPipe。scrapy命令分在项目内和项目...

2018-03-24 11:49:00 326

原创 [code snippet]生成邀请码

参考用 Python 生成随机的邀请码正如参考中所述,邀请码不仅要能够防止客户端伪造,还要方便服务端验证。我大体依据参考中的思路。略微不同的是,id和原始码并没有直接拼接,而是交叉。import randomimport strings_set = string.ascii_letters + string.digitsraw_code_l...

2018-03-18 19:45:00 348

原创 [code snippet]汉字如何转为拼音(ASCII字符)

In [1]: from unidecode import unidecodeIn [2]: s = u'我把大门我的妈孙冬梅'In [3]: sOut[3]: u'\u6211\u628a\u5927\u95e8\u6211\u7684\u5988\u5b59\u51ac\u6885'In [4]: unidecode(s)Out[4]: 'W...

2018-03-18 19:21:00 354

原创 [工具&笔记]supervisor

supervisor是一个在类UNIX操作系统下,以C/S架构来对进程进行管理的工具。参考:Supervisor: A Process Control System,使用 supervisor 管理进程组成服务端(Server)supervisord命令行客户端(Client)supervisorctlWeb界面(Client...

2018-03-13 18:41:00 110

原创 [工具&笔记]pipenv

参考使用pipenv管理你的项目关系pip管理和安装python的第三方包。virtualenv独立的虚拟环境,可避免各个python应用之间互相影响(如对包的版本依赖不同)。pipenv高级的包管理器。对pip和virtualenv的功能做了封装,不必再单独使用两者。除此之外,使用Pipfile和Pipfile.lock两...

2018-03-13 15:58:00 352

原创 微信消息中的电话超链接(ios vs Android)

类似的问题是:安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?与上述场景不同的是,在微信消息中添加<a href="tel:电话号码"></a>链接,会发现Android系统在某些情况下,这个链接会失效。由于此时是在微信消息中,不能使用上述解决方法。其...

2017-10-12 11:25:00 844

原创 最近处理的性能优化总结思考

按照常理,性能优化应该是属于比较高级,处于项目中后期的工作了,但是如果实现不给力,在项目初期就可以遇到了。很多人都嫌弃Python慢,个人认为他们之中90%都没有资格这么说,一方面,需要高性能的地方并不是每个项目都需要,另一方面,他们自己写的代码烂的要死,才是罪魁祸首。Python的代码可读性非常好,利于开发和维护,是对开发者友好的语言。但如果代码写成一团糟,没有扬长避短,导致维护困难,开...

2017-06-11 18:11:00 212

原创 python中的import(涉及pkgutil和inspect包)

python中万物皆对象。维度比较大的有模块、包。一个.py文件就是一个python模块(module),如果一个目录下面有一个__init__.py文件,那么这个目录就是一个python包(package)。当然,这只是极简版的概念。实际上包是一种特殊的模块,而任何定义了__path__属性的模块都被当做包。以两个下划线开头,以两个下划线结尾的属性,暂称魔法属性(自创的),对应...

2016-12-27 00:01:00 994

原创 python解析命令行

getopt:和C中的getopt()等价。optparse:2.7后已不推荐使用。argparse:基于optparse的新库。docopt:根据文档描述,自动生成。另一份参考文档:docopt。更详细的内容可参考上述文档。getopt若对C的getopt()函数不熟悉,或者倾向于使用较少的代码,或者需要对帮助信息和错误信息有更高要求,以上...

2016-11-13 20:22:00 235 1

原创 使用Django建立Blog的记录和总结

Django 版本为1.9以上Django框架结构:对django框架架构和request/response处理流程的分析Blog搭建参考:用Django搭建个人博客Django 搭建简易博客教程代码:https://github.com/threegirl2014/blog命令行常用命令: python manage.py rumserver xx.xx.xx.xx:yyy...

2016-09-26 11:37:00 301

算法导论中文版第二版_扫描版.pdf

算法导论中文版第二版_扫描版.pdf 很好看,很清晰

2013-04-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除