架构

python 网络编程

夙愿已清 提交于 2020-02-22 01:47:18
网络编程 网络编程要用到的地方是:两个程序的数据进行一定程度上的数据交互 这种涉及到两个程序之间通讯的应用大致分为两种情况: 第一类就是应用类:指的是需要安装的桌面应用 第二类就是web类:比如哔哩哔哩这些需要用浏览器访问的网站。 这些应用的本质就是两个程序之间的通讯,而这两种分类又刚好对应了两个软件开发的架构。 C/S架构 c/s即是:Client(客户端)与Server(服务端)架构,这种架构也是从用户层面(物理层面)来划分的. 这里客户端泛指的就是安装在电脑上的exe程序和安装在手机上的app程序, 服务端就是服务器啦 B/S架构 B/S即是:Browser(浏览器端)与Server(服务端)架构,这种架构是从用户场面来划分的 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要安装什么,只需要在浏览器上通过 HTTP请求服务器端相关的资源. 网络连接 在网络上,要想找到一台机器,就必须要要有它的IP地址, 而在每台机器的网卡上,在出厂的时候就有了一个全球唯一的mac地址 而通过ip地址就能再到mac地址,这之间要经过一个叫arp协议的协议 互联网的核心就是由一堆协议组成,协议就是标准 osi七层模型 OSI(开放系统互联(Open System Interconnection)) 人们按照分工不同把互联网协议从逻辑上划分了层级: 来源: https:/

SDN概述及架构

纵然是瞬间 提交于 2020-02-21 22:28:41
原文链接:https://blog.csdn.net/weixin_43265596/article/details/89787232 一、SDN概述 1.1 SDN概念 SDN是一种将网络控制功能与转发功能分离、实现控制可编程的新兴网络架构。这种架构将从控制层从网络设备转移到外部计算设备,使得底层的基础设施对于应用和网络服务而言是透明的、抽象的,网络可被视为一个逻辑的或虚拟的实体。 1.2 SDN产生的原因 传统网络及其设备的只可配置、不可编程 网络的分布式控制与管理架构带来的制约 二、SDN架构 2.1 SDN的基本架构 SDN采用了集中式的控制平面和分布式的转发平面,两个平面相互分离,控制平面利用控制—转发通信接口对转发平面上的网络设备进行集中式控制,并提供灵活的可编程能力,具备以上特点的网络架构都可以被认为是一种广义的SDN。 在 SDN 架构中,控制平面通过控制—转发通信接口对网络设备进行集中控制,这部分控制信令的流量发生在控制器与网络设备之间,独立于终端间通信产生的数据流量,网络设备通过接收控制信令生成转发表,并据此决定数据流量的处理,不再需要使用复杂的分布式网络协议来进行数据转发,如下图所示。 SDN 并不是某一种具体的网络协议,而是一种网络体系框架,这种框架中可以包含多种接口协议。如使用OpenFlow等南向接口协议实现SDN 控制器与 SDN 交换机的交互

springcloud(一)微服务概述

一笑奈何 提交于 2020-02-21 15:15:37
目录 一、什么是微服务 二、微服务的由来 三、微服务的优缺点 四、微服务的设计原则 五、微服务核心组件 一、什么是微服务 简单来说,微服务就是将一个单体应用拆分成若干个小型的服务,协同完成系统功能的一种架构模式,在系统架构层面进行解耦合,将一个复杂问题拆分成若干个简单问题。这样的好处是对于每一个简单问题,开发、维护、部署的难度就降低了很多,可以实现自治,可自主选择最合适的技术框架,提高了项目开发的灵活性。 微服务架构不仅是单纯的拆分,拆分之后的各个微服务之间还要进行通信,否则就无法协同完成需求,也就失去了拆分的意义。不同的微服务之间可以通过某种协议进行通信,相互调用、协同完成功能,并且各服务之间只需要制定统一的协议即可,至于每个微服务是用什么技术框架来实现的,统统不需要关心。这种松耦合的方式使得开发、部署都变得更加灵活,同时系统更容易扩展,降低了开发、运维的难度。 二、微服务的由来 传统的 Java Web 都是采用单体架构的方式来进行开发、部署、运维,所谓单体架构就是将 Application 的所有业务模块全部打包在一个文件中进行部署。在单体架构中,所有的业务模块的耦合性太高,耦合性过高的同时项目体量又很大势必会给各个技术环节带来挑战。项目越进行到后期,这种难度越大,只要有改动,整个应用都需要重新测试,部署,极大的限制了开发的灵活性,降低了开发效率。同时也带来了更大的安全隐患

架构师速成-架构体系

风流意气都作罢 提交于 2020-02-21 10:58:02
经过这段时间的反思和整理,终于对架构有了一个较为明确的理解。架构是产品从无到有以及慢慢壮大过程中所需要的全部技术体系总称,架构过程: 配置、编码、测试、运维、监控分析、安全、运营等一系列技术体系的选型、取舍 技术选型基础上进行规划、设计、实现、迭代、制定相关规范 相关技术及规范运用到产品开发的整个过程中,并在产品迭代过程中对架构进行迭代优化 架构不止包含技术的框架,比如有人用了spring就觉得我已经是架构师了,其实架构并不是这么简单。我们以做一个新浪微博类似产品为例,现实应该是这样的: 产品初期,经典的LAMP快速开发实现第一个版本,功能也无比简单就是加好友,发消息,开发人员也只有一个小的队伍。此时的架构就体现为纯的技术选型及实现,包含了 配置:代码通过git管理,暂时无其他 编码:技术选型为LAMP,基于LAMP的开发框架封装,并在开发团队内制定开发规范 测试:技术人员手工测试 运维:手工发布,主备2台,mysql也做主备 监控:暂不需要 安全:发帖过滤、屏蔽 运营:后台删帖 随着用户的暴增以及功能的增加,产品需要迭代,架构也需要迭代。产品功能增强,性能需要优化,开发人员的增加,此时架构就发生了一个较大的变革: 配置:代码通过git管理,要分为多个模块,不同团队开发不同模块 编码:技术选型增加缓存、消息队列、搜索引擎等,框架封装更加复杂,抽象出基础层和服务层

Java分布式 一些概念理解

十年热恋 提交于 2020-02-21 07:27:31
转至 java那些事 2017-02-09 有些朋友工作一年了觉得该深入一下子了,所以想深入学习一下以提升自己的专业技能,想问一下如何入门Java分布式应用,学习过程大致是怎么样的,涉及到那些知识,框架呢?有那些资料可以推荐? 所以在网络上找了一些资源给大家分享一下! 首先推荐4本书(京东就有) 大型分布式网站架构设计与实践 大型网站技术架构:核心原理与案例分析》 ,大型网站系统与Java中间件实践 《分布式Java应用:基础与实践》 貌似都是4位阿里人写的,一本一本的看吧,绝对会增强你的内功。 小小的总结 分布式架构的演进 系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP 特征: 应用程序、数据库、文件等所有的资源都在一台服务器上。 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver 特征: 应用程序、数据库、文件分别部署在独立的资源上。 描述: 数据量增加,单台服务器性能及存储空间不足

Redis架构之主从复制+keepalived

一个人想着一个人 提交于 2020-02-21 02:46:30
一、Redis主从复制架构的介绍 ## 基本介绍 01:一个主可以有多个从(一主多从);从库下可以有多个从(级联式主从); 02:Redis主从复制时是使用异步复制(主不管slave有没有接收到数据); 03:复制时不会阻塞主服务器响应客户端的请求,因为在进行数据同步时, 主上面执行bgsave命令for出一个子进程来进行数据的同步操作; 04:在复制时可能会影响slave端redis的主进程对客户端的响应;在2.8版本 以后,slave默认是只读的哈? 例如:主从复制架构,写是在master端进行,你通过手段做了读写分离, 让客户端在slave中进行读的操作,此时slave在同步(不管全同步,还是 增量同步)master端的数据时会不会阻塞客户端的读取操作呢? 解答:这个其实是由参数slave-serve-stale-data控制的,它有两个值, yes和no;yes表示仍然响应,可能数据不是最新的;默认就是yes;no表示 不响应,给客户端报"SYNC with master in progress"错误; 05:主从复制架构中,Master端需要开启持久化嘛?这个得根据需求: A:对数据没有持久化的需求,Master和slave都可以不开启的; B:对数据有持久化的需求,Master端不开启,slave端开启,这样会有危险的哈? 因为一但master端重启后

大型高并发高负载网站的系统架构

血红的双手。 提交于 2020-02-21 01:45:13
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系 统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技 术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能 比拟的。      大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。      上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。      1、HTML静态化    其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是 最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点

移动App设计之分层架构+MVC

こ雲淡風輕ζ 提交于 2020-02-20 07:58:40
场景分析: 我们知道,一个移动设备的应用大多与网络有关,也就是说,我在移动设备上看到的数据,一般都是从Server上”拉“过来,显示在我们的移动设备(ios androiud、wpohone等)上。那我们就这个”拉“的过程分析,拉什么样的数据?去哪里拉?拉过来的数据怎么处理?用编程(开发)的思维看,就是定义什么实体(业务实体)、发送请求、解析数据。当然这也只是大体的过程。但从软件架构设计上讲,定义实体、发送请求、解析数据都是具有单独意义的模块。那我们怎么处理这些模块呢? 场景应用: sina weibo。定义timeline、user等实体;请求最新的微薄等;处理(主要是解析)请求的数据;最后是显示在移动设备的UI上。 回到前面的问题,我们该如何处理这个具有单独意义的模块呢?让我们借鉴下web的设计: 在传统的web系统设计中,数据库的访问、业务逻辑和UI设计混淆在一起,这样虽然直观,但一旦需求有所改动,对日后的维护带来很多不便。为了解决这个问题,人们提出了分层的架构思想。 分层架构模式:   " 将解决方案的组件分隔到不同的层中,每一层中的组件应保持内聚性,各层保持松散耦合。" 分层模式是最常见的一种架构模式。在web应用系统开发中,比较流行三层架构(表现层、业务逻辑层、数据访问层),当然我们细分,也可以分层多层(我记得那时候我分七层)。   现时隔多年

Task04

只愿长相守 提交于 2020-02-20 07:23:41
Beam Search 简单greedy search: 维特比算法:选择整体分数最高的句子(搜索空间太大) 集束搜索: 注意力机制 在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。将源序列输入信息以循环单位状态编码,然后将其传递给解码器以生成目标序列。然而这种结构存在着问题,尤其是RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。 与此同时,解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。例如,当把“Hello world”翻译成“Bonjour le monde”时,“Hello”映射成“Bonjour”,“world”映射成“monde”。在seq2seq模型中,解码器只能隐式地从编码器的最终状态中选择相应的信息。然而,注意力机制可以将这种选择过程显式地建模。 Transformer 在之前的章节中,我们已经介绍了主流的神经网络架构如卷积神经网络(CNNs)和循环神经网络(RNNs)。让我们进行一些回顾: CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。 RNNs