基础

Virtual Private Network

虚拟私有云

VPC官网文档

DNS server
Each instance’s metadata server acts as a DNS server. It stores the DNS entries for all VPC network IP addresses in the local VPC network and calls Google’s public DNS server for entries outside the VPC network.

GAE简介

  • PaaS: Platform-as-a-Service(平台即服务)
  • GAE支持Node.js java python PHP Go Ruby
  • 浏览器访问google,需要用翻墙(我用的代理)
  • 但是本地开发,需要Google Cloud SDK。而且需要连接google cloud。需要vpn了。(囧)
    那就本地开发,把代码上传到git,然后clone到GAE

GAE的云端shell

配置&默认环境

  • Debian GNU/Linux 8
  • 10G硬盘(可用3.2G) 2G内存
  • python2.7
  • OpenJDK 1.7
  • 我勒个草,GAE是提供的SaaS还是IaaS?

搭建pyton应用

  • yaml

git clone https://github.com/GoogleCloudPlatform/appengine-try-python-flask.git $TUTORIALDIR

测试应用使用了 Flask Web 框架。

本地应用开发

  • 下载 Google Cloud SDK 并在本地进行开发

  • 构建您的下一个应用:了解如何将 App 引擎与其他云端平台产品结合使用

java

使用 App Engine Maven 插件将一个示例 Java 应用部署至 Google App 引擎

编程指南

/home/acmcqu087378/src/xu-song/java_gae_quickstart-2017-04-13-19-54/target/appengine-try-java-1.0
/home/acmcqu087378/src/xu-song/java_gae_quickstart-2017-04-13-19-54/target/appengine-try-java-1.0/WEB-INF/classes/

免费

  • 配额每 24 小时重置一次
  • 前端实例使用小时数 0.25 实例小时(上限为 28 实例小时)
  • 传出带宽 0.000089 GB(上限为 1 GB)
  • 云端存储A类操作次数 0(上限为 0.02)

  • 注册免费试用,即可获得 300 美元的赠金,并可在 12 个月内试用 Google 云端平台提供的所有功能

免费版限制:

如果不花钱的话……
socket模块无法使用。也就是说,凡是用到import socket的东西都会出错。
每天流量1GB,北京时间下午4点重置。urlfetch每分钟22M,传入传出带宽每分钟56M……所以GoAgent翻墙会有流量限制,而且这并不应当由GoAgent背锅。
详细的资源限制可以到GAE控制面板的“配额”哪里查看。

功能支持

  • 网址抓取(URL Fetch):访问互联网上的资源,抓取检索数据。
  • 邮件(Mail): GAE可以利用基于Gmail的基础设施来发送电子邮件。
  • Memcache缓存:高性能的内存缓存保障,对于那些不需要持久性存储和事务功能的数据(例如临时数据或从数据存储区复制到缓存以进行高速访问的数据)很有用。
  • 图像操作(Image Manipulation):使用该 API,您可以对 JPEG 和 PNG 格式的图像进行缩放、裁剪、旋转和翻转,还能使用预先定义的算法提升图片的质量。
  • 计划任务和任务队列(Scheduled Tasks & Task Queues):允许将任务计划为按指定间隔运行,这些任务通常称为Cron job。另外可以通过在一个队列插入任务(以Web Hook的形式)来实现后台处理,GAE会根据调度方面的设置来安排这个队列里面的任务执行。

GAE新的收费模式——process-instance-hour

同AWS(Amazon Web Services)相比,GAE按照的是process-instance-hour收费模式,而AWS则是按照machine-instance-hour收费。这一点对开发人员相当重要,在AWS里,可以并行运行几十个进程,而在GAE中,当进程在等待I/O传输的过程中仍在收取费用。

这也意味着,在对支持的语言进行编译时,更少的CPU消耗时间等于更少的钱。但同时也意味着,运行多个进程等待的时间更长,收取的费用更高,对于Python开发者而言,这绝对不是一个好消息,因为Python开发往往需要多线程处理多个Web请求。从这个角度来看,GAE每个进程实例每小时0.08美元的收费要比AWS机器为实例0.085美元的收费似乎更为昂贵。

成功案例:

适用于搭一些

经常访问的站点,不要放在GAE,耗流量

比如博客,gitlab服务,

其他

Introduction

这里指的solr-server提供的rest api

支持的操作: add index update delete retrive query faceting

1
2
3
4
5
6
7
8
/select    solr.SearchHandler(后台的类吧?是servlet吗)
/query solr.SearchHandler
/update
/export solr.SearchHandler
/browse solr.SearchHandler
/update/extract solr.extraction.ExtractingRequestHandler

/delete solrconfig.xml里没有

对应solr-server的?

core admin

reference

  • solrconfig.xml的RequestHandler模块
    *

select

select?q=:

dataimport

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
查看状态
/dataimport

重建索引
/dataimport?command=full-import&clean=false&offset=0&endset=1000000

增量索引
/dataimport?command=delta-import

重新加载配置
/dataimport?command=reload-config

终止一个在运行的操作
/dataimport?command=abort



创建索引库
/admin/cores?action=CREATE&name=collection3&instanceDir=/data/solr/member/example/solr/collection3&config=solrconfig.xml&schema=schema.xml&dataDir=data

加载core
/admin/cores?action=LOAD&core=c6

卸载core
/admin/cores?action=UNLOAD&core=collection2&deleteIndex=true

切换索引库
/admin/cores?action=SWAP&core=core1&other=core1

查看core的信息
/admin/cores?action=STATUS

重新加载core
/admin/cores?action=RELOAD&core=core0

合并core
/admin/cores?action=mergeindexes&core=core0&srcCore=core1&srcCore=core2




提交
/update?commit=true

根据id删除索引
update/?stream.body=<delete><id>6380736</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
删除所有索引
update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true

备份
/replication?command=backup

获得最新的索引版本
/replication?command=indexversion

让某从服务器不再从主服务器拉取索引
/replication?command=abortfetch

使某从服务器可以从主服务器拉取修改的索引
/replication?command=enablepoll

返回配置和当前状态
/replication?command=details

f

solr error log

stack size

The stack size specified is too small, Specify at least 768k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

修改bin/solr.in.sh 中的xss

##

solrj

solrj核心就是调用的solr-server提供的restapi。

使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法,来操作solr的API的。SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作。

SolrClient

SolrClient 是一个抽象类,因此要连接到一个远程Solr实例,你需要创建一个 HttpSolrClient 或 CloudSolrClient 的实例。
它们都通过 HTTP 来和 Solr 交流。然后你可以发送 SolrRequest 或 SolrQuery 并获取 SolrResponse

HttpSolrClient

单节点 Solr 客户端

ConcurrentUpdateSolrClient

当实现一个将会一次性批量加载大量文档的 java 应用时,应该考虑使用 ConcurrentUpdateSolrClient 来替代 HttpSolrClient。 ConcurrentUpdateSolrClient 会缓冲所有被添加的文档并将它们写到开启的 HTTP 连接中。 这个类是线程安全的。 尽管任何 SolrClient 请求都可以通过该实现完成, 我们通常推荐仅将 ConcurrentUpdateSolrClient 用在 /update 上。

CloudSolrClient SolrCloud 客户端

LBHttpSolrClient

SolrQuery

SolrRequest

process操作

1
2
3
4
5
6
7
8
9
10
11
12
13
AbstractUpdateRequest
ContentStreamUpdateRequest
UpdateRequest
如果是add操作,UpdateRequest包含所需add的doc
CollectionAdminRequest
CoreAdminRequest
DirectXmlRequest
DocumentAnalysisRequest
FieldAnalysisRequest
GenericSolrRequest
LukeRequest
QueryRequest
SolrPing

SolrResponse

SimpleSolrResponse
SolrResponseBase

add 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DefaultClientConnectionOperator.openConnection(OperatedClientConnection, HttpHost, InetAddress, HttpContext, HttpParams) line: 168
ManagedClientConnectionImpl.open(HttpRoute, HttpContext, HttpParams) line: 304
DefaultRequestDirector.tryConnect(RoutedRequest, HttpContext) line: 611
DefaultRequestDirector.execute(HttpHost, HttpRequest, HttpContext) line: 446
SystemDefaultHttpClient(AbstractHttpClient).doExecute(HttpHost, HttpRequest, HttpContext) line: 882
SystemDefaultHttpClient(CloseableHttpClient).execute(HttpUriRequest, HttpContext) line: 82
SystemDefaultHttpClient(CloseableHttpClient).execute(HttpUriRequest) line: 107
SystemDefaultHttpClient(CloseableHttpClient).execute(HttpUriRequest) line: 55
HttpSolrClient.executeMethod(HttpRequestBase, ResponseParser) line: 480
HttpSolrClient.request(SolrRequest, ResponseParser, String) line: 241
HttpSolrClient.request(SolrRequest, String) line: 230
UpdateRequest(SolrRequest<T>).process(SolrClient, String) line: 150
HttpSolrClient(SolrClient).add(String, SolrInputDocument, int) line: 174
HttpSolrClient(SolrClient).add(String, SolrInputDocument) line: 139
HttpSolrClient(SolrClient).add(SolrInputDocument) line: 153
ClauseSolr.main(String[]) line: 44

soft VS hard commit

参考 zotero/conf-core/solrconfig.xml.pdf

Introduction

solr-web核心就是调用的solr-server提供的restapi。

该文档介绍localhost:8983/solr/ web页面的使用及原理

##

query下面:
Request-Handler (qt)

/select

MongoDB 课程

M101J: MongoDB for Java Developers 笔记

class1

what count for final grade? homework & final exam

class2

  • non-relational: store data not in table like relational. json hireachi
  • schemaless:
  • mongodb is document oriented
  • not support joins between collectionos, not support sql
  • has dynamic shcema
    -

3 0 MongoDB Relative to Relational 没看懂

what features did mongodb omit inorder to retain scalability?
joins & transactions across multiple collections
not index, not secondary index

Overview of building an app with mongodb

  • spark java (a micro web framework inspired by sinatra)
  • freemaker to create html views
  • mongo java driver (connect to mongodb)

install mongodb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bin/mongod - The database process.
bin/mongos - Sharding controller.
bin/mongo - The database shell (uses interactive javascript).



$ ./mongod --help

To run a single server database:

$ mkdir /data/db
$ ./mongod
$
$ # The mongo javascript shell connects to localhost and test database by default:
$ ./mongo
> help

BSON

mondodb stores data as BSON or binary JSON (格式转换由mongo java driver来完成)

  • lightweight
  • traversable 可通过的 穿越的
  • efficient

CRUD

create
read
update
delete
video.movies movies collection in the video database

findOne m101.hw1

同一个collection中的所有doc必须有unique id

  • the heart of the query language for mongodb is a query by example strategy

SS

spark java embeds jetty inside of it

视频中依赖java7 sparkjava 0.9.9.4
sparkjava2必须要java8

hw1

1
2
3
4
5
6
wget hw1....zip
unzip
mongorestore dump
mongo # mongo shell
use m101 # swith to database m101
db.hw1.findOne() # list all the docs in m101.hw1, 也可以db.hw1.find()

hw2

hw3

CDMA: https://www.nowcoder.com/question/next?pid=9013927&qid=14574&tid=13544960

FDM:频分多路复用

FDM:频分多路复用利用通信线路的可用带宽超过了给定的带宽这一优点。频分多路复用的基本原理是:如果每路信号以不同的载波频率进行调制,而且各个载波频率是完全独立的,即各个信道所占用的频带不相互重叠,相邻信道之间用“警戒频带”隔离,那么每个信道就能独立地传输一路信号。

采用FDM技术进行多路复用时,复用后的信号的带宽通常大于复用前所有信号的带宽之和。

信道

在同一信道上同一时刻,可进行双向数据传送的通信方式是

DTE是数据终端设备,一般有路由器和终端主机,DCE是数据通讯设备,一般有广域网交换机和MODEM

带宽

首先说一下带宽的定义:

  1. 在模拟信号系统又叫频宽,是指在固定的时间可传输的资料数量,亦即在传输管道中可以传递数据的能力。通常以每秒传送周期或赫兹(Hz)来表示。
  2. 在数字设备中,带宽指单位时间能通过链路的数据量。通常以bps来表示,即每秒可传输之位数
    在计算机系统中,用带宽作为标识总线和内存性能的指标之一。
    总线带宽指的是总线在单位时间内可以传输的数据总量,等于总线位宽与工作频率的乘积。例如:对于64位、800MHz的前端总线,它的数据传输率就等于64bit×800MHz÷8(Byte)=6.4GB/s
    内存带宽指的是内存总线所能提供的数据传输能力。例如:DDR400内存的数据传输频率为400MHz,那么单条模组就拥有64bit×400MHz÷8(Byte)=3.2GB/s的带宽。
    然后理解题意:
    题目中已经说了传输速率,因此带宽不需要了,况且如果要带宽计算,那么也需要知道传输时通道的位数,是8位,16位还是32位,64位等等,因此直接用传输速率来计算即可

网络拓扑

交换机 VS 路由器

交换机,顾名思意,主要是起交换数据的作用。

路由器,不但起交换数据的作用,它还会寻找到该数据会传给谁,该怎么传。这是交换机和路由器最基本的区别。路由器不但可以交换数据,还可以寻址、路由。

路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。

打个比方:A想给B传递一个东西,如果是在同一个房间内(网络上就是一个局域网内),他们彼此之间是认识的,那么A就可以直接给B这个东东。这就是一个交换机可以完成的事项;
同样,A想给B传递一个东西,但是不在同一个房间内(网络上就是不同局域网内),他们彼此之间是不认识的,那么A就不得不通过其他媒介,寻找到适当的方式才可以给B这个东东。这就是一个路由器该完成的事项;但是交换机做不到。

不过,现在的3层交换机也可以有路由功能。但是,交换机拥有强大的数据交换能力,这是路由器做不到的;路由器有强大的路由功能及安全策略能力,也是交换机做不到的。交换机一般用在区域内起数据交换的功能,路由器一般用在区域间起路由转发的功能。

三层交换技术就是二层交换技术+三层转发技术。传统交换技术是在OSI网络标准模型第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。

  • 一般意义上交换机工作在数据链路层,路由器工作在网络层
  • 交换机根据MAC地址寻址,通过站表选择路由,站表的建立和维护由交换机自动进行
  • 路由器根据IP地址进行寻址,通过路由表路由协议产生
  • 交换机最大的好处是快速,路由器最大的好处是控制能力强

来自 https://www.nowcoder.com/questionTerminal/064e86d1f1244801ad3c61900d2528b3

3层交换机和路由器的区别?