Design

Design
asp.net mvc

2019年4月12日 星期五

關於投資風險(虛擬幣,股票,房地產,其他?)



聊聊寫程式以外的東西吧 投資
近幾年一直看到網路上打著幾%獲利,說著看似很高端的名詞( 虛擬貨幣 人造衛星 人工智能AI  獲利軟體 看盤工具 ).
我自己本身一直都在研究投資相關的資訊,我也是比較嚴謹的人,身為一個工程師實事求是,就來說說近幾年我看到的情況吧.








虛擬貨幣 ( 比特幣,乙太幣,ICO,OTC等等)
最早虛擬貨幣還沒很紅的時候,透過挖礦&投資&搬磚,的確是有批人因為幣值的攀升價格賺到一筆可觀的錢,但隨著挖礦的人越來越多,幣越來越少的情況,交易所一家一家卻越來越多資訊告訴你虛擬貨幣多好賺多好賺?真有這麼好的事嗎?

挖礦
就如我剛說的幣越來越少的情況,設備費用我們姑且不談,你吃最大的成本就是電費,電費所付出的成本早就沒辦法跟你挖礦情形攤平甚至到獲利,但是你會說還有以太幣阿 這麼多幣種可以挖,沒錯 你知道 我知道 大家都知道 ,交易所換幣別的交易費就夠你受了,還有就如我剛說的電費已經不合成本了,還能賺?.

礦池
大家一起挖按比例分攤幣,聽起來好像風險很低,這中間還有沒算到礦池抽的fee,交易所抽成,還有電費,還能賺?

搬磚
搬磚簡單說就是賺匯率差,透過A交易所跟B交易所之間的匯率差賺錢,聽起來好像風險更低了,但是中間的風險就是你無法保證交易時間中的匯率差跟交易所的安全性 交易所安全性問題上網看一堆在倒閉就不多說了,通常交易在你生成交易這段時間匯率是你無法掌控的你真的有辦法賭定你交易期間不會因為匯率波動造成虧損嗎,交易所也不是白痴,長期來你的風險一定是虧損大於獲利甚至全無,還能賺?

軟體
他會告訴你一項工具可以觀察某些甚至很多數據(任何交易商品都有類似東西),讓你透過每個月或是買斷的方式購買這軟體工具,拉幾個數據跟K線對照圖就告訴你看軟體獲利多簡單,他賺的就是你的軟體錢(軟體能賺我還賣你幹嘛),當然我不反對這類工具,因為也真的有人利用工具賺錢,但是我只能說市場是多種因素跟人為造成的,不是用工具幾個指標就能說得清.

股票投顧
市面上有很多所謂帶進帶出的老師,也是跟軟體類似每個月付多少錢,付得多會員等級就越高,就如我上面所說市場因素這麼多你一個老師說賺就賺那誰賠錢,老師也是賺學費為主
也很多事讓你繳學費他教你怎投資的類型,還是那句話這麼好賺當老師幹嘛,最常利用的手法為對沖[透過多空頭時做的方式(虧損少量手續費 多空卻一定會有一邊大量獲利]為了是什麼?就是為了營造賺錢的跡象,當然股票還是可以賺錢但是一定要有自己的一套方法不是一昧相信別人,台灣就是填鴨式教育只想追尋答案過程省略,還是一句話貪阿


龐式詐騙
這也是目前最常見而且最多的東西,這應該說是老早在各領域都會有的手法,而且相當成熟市場上甚至有人專門在賣這類的白皮書教人怎做詐騙,手法不外乎是跟你說投資多少錢多久可以獲利多少,每天po錢 跑車 吃喝玩樂的畫面,講一些高深一些似懂非懂的東西(在我看來是有點可笑),甚至利用釣魚的方式讓你吃點甜頭在利用A被害者錢去補B受害者的獲利,再透過拉下線的方式造成龐大的系統,或許你真有一段時間有錢多收,但我能告訴你最後泡沫搓破是遲早的事情,利用的就是人性的貪念,我就簡單說一句賺錢這麼簡單 我還告訴你幹嘛 我自己賺就好啦


房地產
近期新聞都有報導會有一種專挑網路上自售房屋的屋主,會假裝跟你說要買房子,會告訴只能付給你例如10%的訂金 其餘尾款要等到另一家房子賣掉還才能給你,詐騙也會找來合夥的代書要你權狀,證件,印鑑證明要你交給代書跟你說確保你房子不會賣給其他人,後續再拿你的房子去跟銀行貸款等到貸款錢到手後再找理由跟你說房子不買了,過戶給原本的屋主,屋主就這樣背上大筆貸款金額.還有一種是一屋多賣的情況你買房卻他有賣給其他人 這種情況最好是找有信用的建商公司 並有採用履約保證.


結語
投資前最好多看多聽,甚至安全點定存都是很好的方式,切勿借錢讓眼前的假象沖昏腦袋,投資當然有風險但不是被當韭菜宰,最好的投資就是自己,讓自己多長點知識,努力在工作有所成就,不管身心上都會得到最大的成就.

2019年4月10日 星期三

Windows Mongodb Replica set + Sharding Cluster

Replica set 
Mongodb的高可靠性的架構,主要原理為Primary資料庫之外會同時在Secondary資料庫生成一樣的資料防只在在主資料庫有問題的狀況下我們還有Secondary的資料就有點像HA的機制,詳細如下分為三種角色


1.Primary
唯一具有寫跟讀的角色,主要的存取節點


2.Secondary
只能讀取的角色,可以有一個以上的Secondary,Primary資料會複製一份到Secondary












3.Arbiter
Arbiter不會存取任何資料,主要功能為在Primary無法跟其他Secondary溝通時
會跳出來推舉為新的Secondary擔任Primary



















Sharding Cluster 
分片如字面上的意思就是把資料做切分放置在不同位置,這樣做的主要用意為我們單機如果有大量的資料硬碟快撐不住了 負載爆炸,我們把資料做切分減少每個單機上的資料量提升空間的使用率 減少負載 有種load balance的感覺 一般我們常使用架構為sharding cluster其他種就 不做說明


至於詳細的架構如下 我們一般都是直接連接資料庫拿資料也就是我們如圖上的Shard的位置,當我們做了Sharding的機制後我們就需要個Router層因為我們已經做分層處理了直接存取Shard我們只能看到資料的片段而已這時候Router就起來作用 至於Router怎知道資料該怎取怎處理呢,Config Server就是在做這類資訊的處理存放些Metadata及計算的索引紀錄每個資料Shard的位置.




















實作

介紹這麼多是不是了解不少,那麼我們為什麼需要Replica set + Sharding Cluster呢 Sharding Cluster的壞處就是當一台資料庫掛了我們就無法處理了 這時候Replica set是不是就剛好把這個洞補起來了 我們就有個高可靠性 又有效率的Mongodb架構
Sharding是建立在Replica set架構之上我們首先間建立Replica set

首先我們建立三個檔案primary.conf  secondary.conf   arbiter.conf 的config如下


primary.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\primary\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\primary"
    directoryPerDB: true
net:
    port: 27017 
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: primary
        displayName: primary
replication:
    replSetName: rs
secondary.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\secondary\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\secondary"
    directoryPerDB: true
net:
    port: 27018
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: secondary
        displayName: secondary
replication:
    replSetName: rs
arbiter.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\arbiter\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\arbiter"
    directoryPerDB: true
net:
    port: 27019
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: arbiter
        displayName: arbiter
replication:
    replSetName: rs

這時候可以把我們的服務開起來
#安裝服務
mongod --config "C:\mongodb\config\primary.conf" --install
mongod --config "C:\mongodb\config\secondary.conf" --install
mongod --config "C:\mongodb\config\arbiter.conf" --install

#啟動服務
net start primary
net start secondary
net start arbiter

#進入(這時角色都一樣需要設定)
mongo 127.0.0.1:27017

#加入Primary rs為replSetName設定的
rs.initiate( {   _id : "rs",members: [ { _id : 0, host : "127.0.0.1:27017" } ]})

#加入Secondary
rs.add("127.0.0.1:27018")

#加入Arbiter
rs.addArb("127.0.0.1:27019")

#查看狀態
rs.status()


最後我們查看狀態已經把各個角色都指定好






































再來我們可以試著Primary寫入資料看看是不是已經達到同步的效果
var data = [];
for (var i = 0; i < 50; i++){
    data.push({
        "index":"資料"+NumberInt(i),
        });
}
db.demo.insertMany(data);


然後可以看到我們的Primary跟Secondary都有我們剛新增的資料

未完待續 還有我們的 Sharding Cluster 

2019年4月7日 星期日

TF30063: 您未取得存取 xxxxx 的授權。

很久之前在2015升2017的時候 或是更改AD密碼的時候會出現此問題,突然想到這邊紀錄一下,給遇到相同問題的人

TF30063: 您未取得存取 xxxxx 的授權。





















解決辦法:
刪除本地端緩存 路徑如下
C:\Users\userName\AppData\Local\Microsoft\Team Foundation\x.0\Cache

原因:
可能為更改AD帳號密碼後本地緩存的密碼還是舊的,導致他登入時都依照就的緩存舊的權限下去登入.

2019年4月1日 星期一

Nginx websocket平衡負載設置

主要重點為http頭部請求代上這兩個請求升為websokect
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

events {
    worker_connections  1024;
}


http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
 
    upstream websocket {
     #例如有這兩台我需要負載平衡
     server localhost:3100;  
     server localhost:3101;    
    }
 
    server {
       #代理監聽3102 ws://localhost:3012 可以發現我們在3100 3101之間做平衡
        listen 3102;
        location / {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
   
        }
    }
}




底下為一些參數的說明做個筆記
#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes  1;
 
#全局错误日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及连接数上限
events {
    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,
    #仅用于linux2.6以上内核,可以大大提高nginx的性能
    use   epoll; 
 
    #单个后台worker process进程的最大并发链接数    
    worker_connections  1024;
 
    # 并发总数是 worker_processes 和 worker_connections 的乘积
    # 即 max_clients = worker_processes * worker_connections
    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
    # 为什么上面反向代理要除以4,应该说是一个经验值
    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
    # worker_connections 值的设置跟物理内存大小有关
    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
    # $ cat /proc/sys/fs/file-max
    # 输出 34336
    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
    # 使得并发总数小于操作系统可以打开的最大文件数目
    # 其实质也就是根据主机的物理CPU和内存进行配置
    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
    # ulimit -SHn 65535
 
}
 
 
http {
    #设定mime类型,类型由mime.type文件定义
    include    mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;
 
    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";
 
    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
 
 
    #设定虚拟主机配置
    server {
        #侦听80端口
        listen    80;
        #定义使用 www.nginx.cn访问
        server_name  www.nginx.cn;
 
        #定义服务器的默认网站根目录位置
        root html;
 
        #设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;
 
        #默认请求
        location / {
            
            #定义首页索引文件的名称
            index index.php index.html index.htm;   
 
        }
 
        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #静态文件,nginx自己处理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #过期30天,静态文件不怎么更新,过期可以设大一点,
            #如果频繁更新,则可以设置得小一点。
            expires 30d;
        }
 
        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
        #禁止访问 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}