LuckyDay's blog

Welcome to my blog , I'm is ldaysjun


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

一、基础:协程

发表于 2019-01-23 | 分类于 基础

一、简介

​ 随着互联网的高速发展,用户量也发生了高速的增长。串行模型演变到并发模型,后台的服务框架也是从单体服务,演变成多机服务。后台服务也一直在解决一个问题,如何用最少的服务资源去处理更多的请求?

​ 想要提高资源的利用率,单一提高CPU利用率,或者单一提高IO的利用率都没有用,只有同时提升两者的利用率才会提升资源利用率。

​ 方案:多线程,多进程,异步IO,还有协程。

进程、线程是内核级别的。但是协程对于内核来说是无感知的,完全由用户自己控制,所以也称之为用户级线程,因为不被内核感知,无法做到CPU的强制切换,(例如:进程、线程间切换)​ ,只能自己主动交出控制权。

阅读全文 »

四、微服务:负载均衡算法

发表于 2019-01-20 | 分类于 微服务

四、微服务:负载均衡算法

一、简介

负载均衡是提供高可用服务的关键基础组件,核心作用就是将大量请求以合理的方式分配到多个执行单元上去执行,达到最优化的资源使用方式,避免多个单元同时发生过载。

比如我们从注册中心查询到10个可用节点,通过负载均衡器,可以将我们的10个请求,以一种策略打散到不同的可执行节点上,保障可用性。

具体详细介绍:负载均衡

阅读全文 »

三、微服务:Etcd服务注册与发现

发表于 2019-01-14 | 分类于 微服务

1、引言

这里服务的发现与注册使用Etcd,Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。Etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。

开原地址:Etcd

服务的发现与注册需要解决以下问题:

  • 服务IP与端口的确定方式。
  • 服务注册与发现。
  • 服务下线
  • 服务健康监测。
  • 节点加入或退出,如何通知订阅者变化。
  • 查看应用的订阅列表,发布列表,以及订阅节点。
阅读全文 »

二、微服务:go-kit中间件

发表于 2019-01-02 | 分类于 微服务

1、简介

​ 没有监控,日志等信息是不可能在投入生产环境的。在go-kit中,以中间件的形式添加这些附属服务。其实就是增加新的Endpoint(服务端点),使用go-kit可以很容易的增加你需要的组件。

2、实践

go-kit的Middleware(中间件)的定义如下。

1
type Middleware func(Endpoint) Endpoint

原理很简单,假设传进去一个A_Endpoint,返回一个新的B_Endpoint,新返回的B_Endpoint其实包裹着A_Endpoint,在B_Endpoint中添加我们想要加载的组件。

阅读全文 »

一、微服务:go-kit简介

发表于 2019-01-01 | 分类于 微服务

1、简介

​ go-kit将自己定位为微服务的标准工具集,让你可以在整个微服务的构建中使用go。使用微服务就意味着要构建分布式系统,go-kit提供了一系列的解决方案,让你的精力更多关注在业务逻辑上。go-kit并不像是一个框架,你可以使用自己常用的数据库,架构模式,所以go-kit有很强的可定制化性。go-kit更多为交互性设计的。

2、为什么选择go-kit ?

​ 用官网的话回答:Go是很好的通用语言,但微服务需要一定的专业支持。 RPC安全性,系统可观察性,基础设施集成, Go-kit填充了标准库留下的空白, 并且使Go成为在任何组织中编写微服务的一流语言。

阅读全文 »

文件I/O(二)

发表于 2018-12-07 | 分类于 Unix

Unix系统支持不同进程可以通过dup函数共享打开文件。内核通过三中数据结构的映射关系标识打开文件。

2.1、内核数据结构

结构如下:

阅读全文 »

JulyT、通用爬虫框架

发表于 2018-12-07 | 分类于 框架

一、背景

一直准备做一个iOS优质文章的聚合,每天定向爬取大V们的博客。所以就萌生了尝试打造一个通用爬虫框架的想法。加上近期开始golang的学习,所以选择使用go来写。

各章内容总结的比较粗糙,有什么问题,欢迎交流,欢迎各位大佬来喷。

传送门JulyT

1.1 初识

我给它起名叫JulyT,目前0.1版本支持Xpath数据解析,批量任务并发。简单的规则编写。就可以完成定向数据的提取.

例如:实现抓取列表,再抓取列表页详情数据,接着翻页继续

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func rule(node *Xpath.Node,spider *JulySpider.Spider)  {
path := Xpath.MustCompile("//*[@id=\"archive-page\"]/section")
it := path.Iter(node)

for it.Next() {
urlPath := Xpath.MustCompile("a/@href")
url,_:= urlPath.String(it.Node())
//
spider.RunNextStep("http://lastdays.cn"+url,analysisData)
}
fmt.Println("================一页数据==================")
nextPath := Xpath.MustCompile("//*[@id=\"page-nav\"]/a[@class=\"extend next\"]/@href")
if nextPath.Exists(node) {
url,_ := nextPath.String(node)
spider.RunNextStep("http://lastdays.cn"+url,rule)
}
}
阅读全文 »

文件I/O(一)

发表于 2018-12-02 | 分类于 Unix

Unix系统内核来说,所有打开文件都是通过文件描述符来操作的。文件描述符是一个非负整数。打开,创建文件,系统内核就会返回一个文件描述符号。

  • 0与进程标准输入关联
  • 1与进程标准输出关联
  • 2与标准错误关联

1.1、函数 lseek

检测标准输入是否可以被设置偏移量

1
2
3
4
5
6
7
8
9
10
11
#include "apue.h"

int main(int argc, char const *argv[])
{
if(lseek(STDIN_FILENO,0,SEEK_CUR) == -1){
printf("connot seek\n");
}else{
printf("seek OK \n");
}
return 0;
}
阅读全文 »

HTTP 学习笔记

发表于 2018-11-01 | 分类于 HTTP

​ 自己空余的时间,做了一些总结性的笔记。每次阅读都会有不一样的收获。决定做一个笔记,记录下来。

一、认知

1.1 TCP/IP 协议族

​ 常见的协议族成员:TCP、UDP、IP、HTTP、ICMP、DNS、FTP、SNMP等等,互联网依托这些协议关联起来。协议的统称认知为: TCP/IP ,HTTP就是协议族中一员。

1.2 协议族为什么分层

​ TCP/IP,分为四层,也有一种说法OSI七层模型。分层设计因为整个协议族涉及的协议很多,如果没有良好的分层接口设计,则修改一处可能引起多处改动,不利于维护,升级。跟我们应用架构一个道理。

  • 应用层:为开发者,用户,提供API接口及通信应用服务。
  • 传输层:为应用层提供设备之间的数据传输相关控制。
  • 网络层:传输线路的规划选择,传输数据。
  • 数据链路层:处理网络相关的硬件设备

更多细节的原因,需要深入每一层细细研究。

阅读全文 »
123
ldaysjun

ldaysjun

29 日志
9 分类
14 标签
GitHub E-Mail Google
© 2021 ldaysjun
由 Hexo 强力驱动
主题 - NexT.Mist