Documentation ¶
Index ¶
- Constants
- type Config
- type DistributedLog
- func (l *DistributedLog) Append(record *api.Record) (uint64, error)
- func (l *DistributedLog) Close() error
- func (l *DistributedLog) GetServers() ([]*api.Server, error)
- func (l *DistributedLog) Join(id, addr string) error
- func (l *DistributedLog) Leave(id string) error
- func (l *DistributedLog) Read(offset uint64) (*api.Record, error)
- func (l *DistributedLog) WaitForLeader(timeout time.Duration) error
- type Log
- func (l *Log) Append(record *api.Record) (uint64, error)
- func (l *Log) Close() error
- func (l *Log) HighestOffset() (uint64, error)
- func (l *Log) LowestOffset() (uint64, error)
- func (l *Log) Read(off uint64) (*api.Record, error)
- func (l *Log) Reader() io.Reader
- func (l *Log) Remove() error
- func (l *Log) Reset() error
- func (l *Log) Truncate(lowest uint64) error
- type RequestType
- type StreamLayer
Constants ¶
const RaftRPC = 1
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DistributedLog ¶
type DistributedLog struct {
// contains filtered or unexported fields
}
DistributedLog は分散ログサーバが保持するログ情報を管理する。
func NewDistributedLog ¶
func NewDistributedLog(dataDir string, config Config) (*DistributedLog, error)
func (*DistributedLog) Append ¶
func (l *DistributedLog) Append(record *api.Record) (uint64, error)
Append はログにレコードを追加する。
func (*DistributedLog) Close ¶
func (l *DistributedLog) Close() error
Close はRaftインスタンスをシャットダウンし、Raftのログストア及びローカルのログを閉じる。
func (*DistributedLog) GetServers ¶
func (l *DistributedLog) GetServers() ([]*api.Server, error)
GetServers はクラスタのサーバ情報一覧を返却する。 サーバ情報にはクライアントが接続すべきサーバアドレスと、リーダかどうかのフラグを含む。
NOTE: Raftの設定はクラスタ内のサーバで構成され、その設定には各サーバのID,アドレス,投票権(※)が含まれている。 ※当該システムでは投票権は利用しない。 そのためRaftは、クラスタ内のリーダーのアドレスを教えることができる。
func (*DistributedLog) Join ¶
func (l *DistributedLog) Join(id, addr string) error
Join はRaftクラスタにサーバを追加する。(すべてのサーバは投票者として追加される)
NOTE: Raftは AddNonVoter API で非投票者としてサーバ追加することもサポートしている。数多くのサーバに 状態を複製し、最終的に一貫性のある読み取り専用の状態を提供したい場合、非投票者サーバが有用となる。 なぜなら投票権を持つサーバを追加する度に、リーダーは過半数を得るために多くのサーバと通信する必要があり、 レプリケーションや選出に時間がかかる可能性が高くなるためである。
func (*DistributedLog) Leave ¶
func (l *DistributedLog) Leave(id string) error
Leave はサーバをRaftクラスタから除去する。リーダーを除去した場合、新たな選出が行われる。
func (*DistributedLog) Read ¶
func (l *DistributedLog) Read(offset uint64) (*api.Record, error)
Read はサーバのログからオフセットで指定されたレコードを読み出す。 緩やかな一貫性 (relaxed consistency) のため、Raftを経由せずに読み出し操作を行う。
NOTE: 強い一貫性 (strong consistency) が必要な場合、読み出しは書き込みに対して 最新でなければならないためRaftを経由する必要があるが、読み出し効率が悪くなり性能が落ちる。
func (*DistributedLog) WaitForLeader ¶
func (l *DistributedLog) WaitForLeader(timeout time.Duration) error
WaitForLeader はクラスタがリーダーを選出するか、タイムアウトするまで待機する。
type Log ¶
Log はセグメントの集合体であるsegmentsと書き込み対象のactiveSegmentを保持する。 Dirにセグメントを保存する。
func (*Log) HighestOffset ¶
HighestOffset は現時点で最新のオフセット(nextOffsetの直前)を返却する。
func (*Log) LowestOffset ¶
LowestOffset は最古のオフセットを返却する。
type StreamLayer ¶
type StreamLayer struct {
// contains filtered or unexported fields
}
StreamLayer はRaftサーバと接続するにあたって低レベルなストリーム抽象化を提供するための、 トランスポートのStreamLayerインタフェースを満たすメソッドを実装する。
func NewStreamLayer ¶
func NewStreamLayer(ln net.Listener, serverTLSConfig, peerTLSConfig *tls.Config) *StreamLayer
func (*StreamLayer) Accept ¶
func (s *StreamLayer) Accept() (net.Conn, error)
Accept はDialメソッドに対応し、入ってくるコネクションを受け入れ、 コネクション種別を識別するバイトを読み出し、サーバ側のTLS接続を作成する。
func (*StreamLayer) Dial ¶
func (s *StreamLayer) Dial(addr raft.ServerAddress, timeout time.Duration) (net.Conn, error)
Dial はRaftクラスタ内における他サーバへの新たな発信コネクションを作成する。
NOTE: サーバ接続の際、コネクション種別を識別するためにRaftRPCバイトを書き込み、 ログのgRPCリクエストと同じポートでRaftを多重化できる。 ストリームレイヤをピアTLSで設定することで、TLSクライアント側の接続が行われる。